使用unresolve varialbes在数据步骤中循环

时间:2015-07-07 15:03:25

标签: sas

我有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无法解决。

2 个答案:

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