データ ステップの実行中に、データセットの特定の値を含む文字列変数を作成する方法を探しています。
サンプル データ セット work.test:
AddToStringYN Value
Y One
Y Two
N Three
Y Four
N Five
最終的に、変数は次のようになります: OneTwoFour (またはさらに良い FourTwoOne)。これはとても簡単に見えますが、それを行う方法を見つけることができないようです。また、次のようなマクロ変数を操作しようとしました。
%let stringvar=;
Data _null_;
set work.test;
if AddToStringYN = "Y" then do;
call symput('stringvar',"&stringvar" || strip(value));
end;
Run;
しかし、これは次のようになります。
GLOBAL STRINGVAR Four
したがって、最後の値のみを取得します。これは、このマクロ機能に関する私の誤解が原因であるに違いないと思いますが、変数に最後の値しかない理由がわかりません。最後に symput が呼び出されて実際に実行されたか何かだと思っていましたが、コードを次のように調整すると:
%let stringvar=;
Data _null_;
set work.test;
if AddToStringYN = "Y" then do;
call symput('stringvar'||strip(value),"&stringvar" || strip(value));
end;
Run;
それから私はそれらすべてを取得します:
GLOBAL STRINGVARONE One
GLOBAL STRINGVARTWO Two
GLOBAL STRINGVARFOUR Four
したがって、私の最後の推測では、データステップを通過すると、「call symput ...」行が実際にマクロプロセッサーに追加され、「&stringvar」が既に置き換えられており、最後のステートメントの後にのみ、それらがすべて実行されます。
これは良い仮定ですか、それとも別の説明がありますか? 元の質問に戻ります:これを達成する簡単な方法はありますか(目的の変数を持つ)?