変数のリストを生成しようとしましたが、その名前はマクロに格納されています& varsnew。これらの変数の1番目(2番目、3番目など)の値は、別のマクロのリスト(& varsoldに格納されている)の別のリストの1番目(2番目、3番目など) & varsoldが欠けていないか、または(b)&の変数が存在しない場合は0です。coalesceはsasマクロでは機能しませんか?
次のコードは、&変数に変数を定義するためにif-then節を使用する場合にうまく機能します。私は以下のように、& varsnewで変数を定義するためにCOALESCE関数を使用する場合
%macro coal;
data DS;
set DS;
%do i=1 %to %sysfunc(countw(&varsold.));
if %scan(&varsold.,&i.)<=.z then %scan(&varsnew.,&i.)=0 ;
else %scan(&varsnew.,&i.)=%scan(&varsold.,&i.);
%end;
run;
%mend;
%coal;
しかし、その後、コードは動作しません。私は困惑している。
%macro coal;
data DS;
set DS;
%do i=1 %to %sysfunc(countw(&varsold.));
%scan(&varsnew.,&i.)= %sysfunc(coalesce(%scan(&varsold.,&i.),0));
%end;
run;
%mend;
%coal;
「動作しない」とはどういう意味ですか? – superfluous
エラー:%SYSFUNCまたは%QSYSFUNCマクロ関数によって参照される関数COALESCEの引数1が数値ではありません。 – Jay
文字値を使うときには 'COALESCEC()'を使う必要があります。 '%SCAN()'関数は数値ではなく変数名を返します。 – Tom