我想用20个数据集的行号初始化20个宏变量。最后,我想创建20个数组(test1-test20),并将其初始化为从20个数据集中获得的大小。但是我在解引用保持长度为Iam的长度的变量方面存在一些问题,不确定是否正确解引用为:
&&&& var&I .._ rows
我能得到一些建议吗?代码段位于下面
%let var1 = dataset112;
%let var2 = dataset22212;
%let var3 = dataset3222;
...
%let var20 =dataset213321;
%let varN =20;
%macro setsize;
%do i=1 %to &varN;
proc sql noprint;
select count(surv_probs)
into : &&var&i.._rows
from work.&&var&i;
quit;
%end;
%mend;
%macro al;
%do I=1 %to &varN;
array test&I {&&&var&I.._rows};
%end;
%mend;
data ttt;
%al
run;
答案 0 :(得分:0)
在开始编写宏之前,请确保您知道要编写的代码。因此,让我们制作一些宏变量,看看您在SQL查询中使用的引用是否正确。
%let var1 = dataset112;
%let var2 = dataset22212;
%let i=1 ;
%put Target varname = &&var&i.._rows ;
%put Source dataset name= &&var&i;
因此,我们将宏变量设置为某个值,然后尝试显示它。
%let dataset112_rows=123 ;
%put Number of rows = &&&&&&var&i.._rows ;
在第一遍&i.
被替换,所有&&
被转换为&
,因此您得到&&&var1._rows
。第二次通过后,您将获得&dataset112_rows
。因此,第三遍之后,您将得到结果123
。
如果您对所有实际问题都进行了解释,则可能有一种方法可以做您想要的事情,而不会束手无策。