是否可以用简单的方式增加不同的前缀变量名称?例如,如果我的数据集具有列Score1一路Score20,我可以简单地做:增量变量名称
input Score1-Score20;
但如果我有Score1秩1共1页到Score20 Rank20 Total20,有没有办法来增加这些无需手动打出每一个?所以结果如下所示:
Score1 Rank1 Total1 Score2 Rank2 Total2 Score3 Rank3 Total3 etc...
是否可以用简单的方式增加不同的前缀变量名称?例如,如果我的数据集具有列Score1一路Score20,我可以简单地做:增量变量名称
input Score1-Score20;
但如果我有Score1秩1共1页到Score20 Rank20 Total20,有没有办法来增加这些无需手动打出每一个?所以结果如下所示:
Score1 Rank1 Total1 Score2 Rank2 Total2 Score3 Rank3 Total3 etc...
您是否在意变量是否以不同于输入文件中的顺序创建?如果不是,则使用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 ;
您可能可以为此做一个宏。我认为这会工作:
%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
同样的问题在这里,在本周早些时候询问,得到的答案是一样的。
https://communities.sas.com/t5/General-SAS-Programming/Variables-listing/m-p/238350#M34601
您可以创建一个宏创建的名称。
data _null_;
length var $1000.;
do i=1 to 10;
var=catt(var, " Total"||put(i, 2. -l), " Male"||put(i, 2. -l), " Female"||put(i, 2. -l));
end;
call symputx('input_list', var);
run;
%put &input_list;
是的,我只是想知道是否有一个简单的方法来创建变量的顺序 – coderX
好的回答汤姆。在你的%namelist定义中,我认为你希望第二个参数是n。 – Quentin
@Quentin谢谢。固定。 – Tom