我有proc sql select into:
的几个参数,我希望将它们全部存储到名为parm
的数据集中。以下是我尝试的代码:
我从上一步获得了以下参数:
%let count = 4;
%let yymm1 = '1505';
%let yymm2 = '1504';
%let yymm3 = '1503';
%let yymm4 = '1502';
以下是数据步骤:
data parm;
format yymm1 - yymm&count. $4.;
array A(*) yymm1-yymm&count.;
do i = 1 to &count.;
A(i) = "&&yymm&i";
end;
run;
问题在于& i和& yymm无法解决。
答案 0 :(得分:2)
虽然我回应@Joe的评论,但这是我对你的具体情况的建议。首先确保宏变量值是否包含单引号或NOT。你在宏变量定义中有它,而数据步骤中的长度= 4不会为你削减它。然后就像@Joe建议的那样,你需要通过执行以下操作来分离宏变量和数据步变量:
%let count = 4;
%let yymm1 = '1505';
%let yymm2 = '1504';
%let yymm3 = '1503';
%let yymm4 = '1502';
data parm;
format yymm1 - yymm&count. $6.;
array A(*) yymm1-yymm&count.;
do i = 1 to &count.;
A(i) = symget(cats('yymm',i));
end;
run;
答案 1 :(得分:0)
您的代码的问题在于您引用了未定义的宏变量I.请注意,您的DO循环正在创建数据集变量I.重新编码以使用宏%DO循环或修改程序以使用值数据集变量I用于构建要检索的宏变量的名称。
do i=1 to dim(a);
a(i) = symget(cats('yymm',i));
end;