取消引用宏变量的正确方法

时间:2018-07-28 15:29:04

标签: sas

我想用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;

1 个答案:

答案 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

如果您对所有实际问题都进行了解释,则可能有一种方法可以做您想要的事情,而不会束手无策。