是否可以以简单的方式增加不同的前缀变量名称?例如,如果我的数据集中有Score1的列,一直到Score20,我可以这样做:
input Score1-Score20;
但是如果我得分1 Rank1总计1到得分20 Rank20 Total20,有没有办法增加这些而不用手动输入每一个?结果如下:
Score1 Rank1 Total1 Score2 Rank2 Total2 Score3 Rank3 Total3 etc...
答案 0 :(得分:2)
您是否关心变量是否以与输入文件不同的顺序创建?如果没有,那么使用ARRAY。试试这个例子。
data x ;
array x(3,20) a1-a20 b1-b20 c1-c20 ;
infile cards truncover;
do block=1 to 20;
do item=1 to 3;
input x(item,block) @;
end;
end;
put (_all_) (=);
list;
cards;
1 1 1 2 2 2 3 3 3 4 4 4 5 5 5
;
如果您按此顺序需要它们,那么您需要使用某种类型的代码生成。
您可以创建一个简单的函数样式宏来发出名称列表。
%macro namelist(baselist,n);
%local i j;
%do i=1 %to &n ;
%do j=1 %to %sysfunc(countw(&baselist));
%scan(&baselist,&j)&i
%end;
%end;
%mend namelist;
...
input %namelist(Rank Total Score,20) ;
或者您可以使用简单的数据步骤将列表构建为宏变量。
data _null_;
length i 8 basename $30 namelist $32000;
do i=1 to 20 ;
do basename='Rank ','Total','Score';
namelist=catx(' ',namelist,cats(basename,i));
end;
end;
call symputx('namelist',namelist);
run;
...
input &namelist ;
答案 1 :(得分:0)
你可以为此做一个宏。我认为这样可行:
%macro mymacro(runs);
%do i=1 %to &runs;
input Score&i Rank&i Total&i;
run;
%end;
%mend create;
%mymacro(20)
请尝试此处以获得更好的文档:https://support.sas.com/documentation/cdl/en/mcrolref/61885/HTML/default/viewer.htm#a000543755.htm
答案 2 :(得分:0)
本周早些时候在这里提出同样的问题,答案是一样的。
https://communities.sas.com/t5/General-SAS-Programming/Variables-listing/m-p/238350#M34601
您可以创建一个宏来创建名称。
var inputString = 'Showing <span id="results_end">10</span> of <span id="results_total">55</span> items';
var el = document.createElement( 'html' );
el.innerHTML = inputString;
var num = parseInt(el.getElementById( 'results_total' ).innertext);