4

次のような例があります。

proc sql;
select dealno into :deal_no 
from deal_table; 

今、テーブル deal_table にすべての dealno を含む変数をトラバースしたいのですが、そのdeal_no方法がわかりません。

4

3 に答える 3

6

もう 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;
于 2012-11-13T09:31:41.040 に答える
5

もしあなたがそうするなら

%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;
于 2012-11-13T07:08:16.267 に答える
2

ここに別の解決策があります。

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;
于 2014-06-18T20:29:38.123 に答える