次のような例があります。
proc sql;
select dealno into :deal_no
from deal_table;
今、テーブル deal_table にすべての dealno を含む変数をトラバースしたいのですが、そのdeal_no
方法がわかりません。
次のような例があります。
proc sql;
select dealno into :deal_no
from deal_table;
今、テーブル deal_table にすべての dealno を含む変数をトラバースしたいのですが、そのdeal_no
方法がわかりません。
もう 1 つのオプションは、値に区切り記号を追加する 'separated by' を SQL コードに追加することです。その後、データ ステップで SCAN 関数を使用するか、マクロで %SCAN を使用して値をループし、必要なタスクを実行できます。以下の例。
proc sql noprint;
select age into :age separated by ','
from sashelp.class;
quit;
%put &age.;
data test;
do i=1 by 1 while(scan("&age.",i) ne '');
age=scan("&age.",i);
output;
end;
drop i;
run;
もしあなたがそうするなら
%put &deal_no;
dealno
のすべてではなく、最初の値のみが含まれていることがわかります。これを回避するには、次のようなことができます。
proc sql;
create table counter as select dealno from deal_table;
select dealno into :deal_no_1 - :deal_no_&sqlobs
from deal_table;
quit;
%let N = &sqlobs;
%macro loop;
%do i = 1 %to &N;
%put &&deal_no_&i;
%end;
%mend;
%loop; run;
ここに別の解決策があります。
proc sql noprint;
select age into :ageVals separated by ' '
from ageData;
quit;
%put &ageVals;
%macro loopAgeVals; %let i = 1; %let ageVal = %scan(&ageVals, &i);
%do %while("&ageVal" ~= "");
%put &ageVal;
%let i = %eval(&i + 1);
%let ageVal = %scan(&ageVals, &i);
%end;
%mend;
%loopAgeVals;