保持されている値を連結しようとしています。 これはコードの私の部分である:SAS:文字列が位置955でトリムされている理由
data &_output.;
set &_input.;
by cpn;
retain json_array;
if first.cpn and last.cpn then do;
flag = 'both';
concat = ('subscriptions:[{'||'"mpc" : "'||compress(mpc)||'" , '||'"contract_start_date" : "'||compress(contract_start_date)||'" '||' , "contract_end_date" : "'||compress(contract_end_date)||'"'||' , "subscription_status_code" : "'||compress(subscription_status_code)||'"'||' , '||'"promo_code" : "'||compress(promo_code)||'" '||' , "print_or_digi_flag" : "'||compress(print_or_digi_flag)||'"'||' , "payment_method_selection" : "'||compress(payment_method_selection)||'"'||', "subscription_type_code" : "'||compress(subscription_type_code)||'"'||' , "report_trial_subscription" : "'||compress(report_trial_subscription)||'"'||' , "product_desc" : "'||compress(product_desc)||'"}]');
end;
else if first.cpn then do;
flag = 'first';
concat = ('subscriptions:[{'||'"mpc" : "'||compress(mpc)||'" , '||'"contract_start_date" : "'||compress(contract_start_date)||'" '||' , "contract_end_date" : "'||compress(contract_end_date)||'"'||' , "subscription_status_code" : "'||compress(subscription_status_code)||'"'||' , '||'"promo_code" : "'||compress(promo_code)||'" '||' , "print_or_digi_flag" : "'||compress(print_or_digi_flag)||'"'||' , "payment_method_selection" : "'||compress(payment_method_selection)||'"'||', "subscription_type_code" : "'||compress(subscription_type_code)||'"'||' , "report_trial_subscription" : "'||compress(report_trial_subscription)||'"'||' , "product_desc" : "'||compress(product_desc)||'"} , ');
end;
else if last.cpn then do;
flag = 'last';
concat = ('{"mpc" : "'||compress(mpc)||'" , '||'"contract_start_date" : "'||compress(contract_start_date)||'" '||' , "contract_end_date" : "'||compress(contract_end_date)||'"'||' , "subscription_status_code" : "'||compress(subscription_status_code)||'"'||' , '||'"promo_code" : "'||compress(promo_code)||'" '||' , "print_or_digi_flag" : "'||compress(print_or_digi_flag)||'"'||' , "payment_method_selection" : "'||compress(payment_method_selection)||'"'||', "subscription_type_code" : "'||compress(subscription_type_code)||'"'||' , "report_trial_subscription" : "'||compress(report_trial_subscription)||'"'||' , "product_desc" : "'||compress(product_desc)||'" }]');
end;
else if not first.cpn and not last.cpn then do;
flag = 'none';
concat = trim(('{"mpc" : "'||compress(mpc)||'" , '||'"contract_start_date" : "'||compress(contract_start_date)||'" '||' , "contract_end_date" : "'||compress(contract_end_date)||'"'||' , "subscription_status_code" : "'||compress(subscription_status_code)||'"'||' , '||'"promo_code" : "'||compress(promo_code)||'" '||' , "print_or_digi_flag" : "'||compress(print_or_digi_flag)||'"'||' , "payment_method_selection" : "'||compress(payment_method_selection)||'"'||', "subscription_type_code" : "'||compress(subscription_type_code)||'"'||' , "report_trial_subscription" : "'||compress(report_trial_subscription)||'"'||' , "product_desc" : "'||compress(product_desc)||'"} , '));
end;
if first.cpn then json_array = trim(concat);
else json_array = trim(json_array)||trim(concat);
run;
例えば、CPN 4つのレコード、 があるとjson_arrayの長さは、3番目のレコードに955に達し、場合 - これは値がトリミングされる場合であり、そのそのcpnのjson_arrayの最終結果です。 json_array & concatの両方が10,000ポジションに設定されています。 なぜトリムされていますか?
ありがとうございます。 TRIM(上のSASドキュメントから
トリミング済みですか?それとも、それを追加するためにCONCATに何も入れられていないので、ただ成長を止めますか? – Tom
トリミングされました。最後の値(連結されたもの)は変数json_arrayにある – user2518751
CONCATとJSON_ARRAYの長さはどこに設定されていますか?あなたが投稿したコードにはありません。また、それらにフォーマットを添付するか、どちらかを行いますか?長さ$ 10000のJSON_ARRAYを定義する場合は、$ 955という形式を付けます。その値を見る通常の試みは、それが切り捨てられたように見えます。 – Tom