2016-11-04 4 views
0

私は2つの配列を持っていますが、もう一方は条件付きにしたいと考えています。 ARRAY1にはバイナリフラグ(0または1)が含まれていますが、ARRAY1 [i]の内容が0の場合は2番目の配列を空白にします。ARRAY1とARRAY2の要素数は同じです。SASで条件付きの複数のダイナミックアレイ

data test; 

set test_data; 

    array ARRAY1 &variable_flags; 

    array ARRAY2 $ &variable_list &variable_list_initial_values; 

    do i=1 to &variable_count; 

    if ARRAY1[i]=0 then ARRAY2[i]=""; 

    end; 

run; 

私の出力は、ARRAY [i]で0になるまで機能します。それが起こると、単語の後に列が空白になります。私は添付画像のようなもので終わる。なぜこうなった?

enter image description here

+3

テストデータとサンプル出力を質問にテキストとして投稿します。データの画像は、プログラムエディタに貼り付けるのが難しいです。 – Tom

+0

私はまだ混乱しています。サンプル入力を追加することを提案します。そして配列の質問に集中するためにマクロのものを削除してください。マクロ変数を使わずに作業したら、いつでもそれらを追加することができます。 – Quentin

答えて

0

アレイの初期値を一度だけ設定されています。これらは、データステップの各反復の開始時に再適用されません。初期値を持つ別の配列を持つようにロジックを変更することができます。テストデータを作ってみましょう。

data test_data; 
    input matt_flg @@ ; 
cards; 
1 1 0 0 1 1 
; 

次に、FLAG変数の値に基づいて、デフォルト値または空のいずれかに値を設定します。

%let variable_flags=matt_flg; 
%let variable_list=matt; 
%let variable_list_initial_values="MATT"; 
%let variable_count=%sysfunc(countw(&variable_list)); 
%let maxlength=20 ; 
data test; 
    set test_data; 
    array flags &variable_flags; 
    array vars $&maxlength. &variable_list ; 
    array default (&variable_count) $&maxlength. _temporary_ (&variable_list_initial_values); 
    do i=1 to dim(vars); 
    if flags(i) then vars(i)=default(i); 
    else vars(i)=' '; 
    end; 
run; 
関連する問題