SAS do-loop用于创建变量

时间:2017-08-31 18:11:29

标签: arrays loops sas

假设我有一堆变量(称为eq3_xxxxx,其中xxx是变量),它们都有5个可能的级别(1,2,3,4,5),我想为每个级别创建一个虚拟变量每个变量。

我以为我可以做类似的事情:

%macro eq_levels(eq3:);
data mydata;
%do i = 1 %to 5;
x=cats(%eq3:,%i);
%end;
%mend;

但这似乎不起作用。我宁愿不使用SQL或类似的东西,因为我认为数组和do循环解决方案应该足够了,但是如果可以直截了当地解释它,我会很开心。

2 个答案:

答案 0 :(得分:0)

这可能只是您遇到的一些小问题。这是你想要的吗?

%macro eq_levels(eq3);
    data;
        do i = 1 to 5;
            x = cats(&eq3,i);
            output;
        end;
    run;
%mend;
%eq_levels("eq3_");

输出:

    i   x
1   1   eq3_1
2   2   eq3_2
3   3   eq3_3
4   4   eq3_4
5   5   eq3_5

答案 1 :(得分:0)

我可能误读了这个,但我知道OP需要多个变量:

%macro macro_evn;
    data mydata;
        %do i=1 %to 5;
        var&i=&i.;
        output;
    %end;
%mend;
%macro_evn;

导致

var1 var2 var3 var4 var5 
1     .    .    .    . 
1     2    .    .    . 
1     2    3 
....

根据需要可以轻松填写​​。然后,也许我误解了这个问题。