【问题标题】:SAS, generate (repeat) sequency number, elegant waySAS,生成(重复)序列号,优雅的方式
【发布时间】:2016-04-06 23:29:14
【问题描述】:

我想生成下面的数据集。而不是写出 1-84,这样做有更好的方法吗?谢谢。

data test; input Index @@; datalines;
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40
41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60
61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80
81 82 83 84
; run;

另外,我有一个如下所示的宏变量。有更好的写法吗?

%let Term=
24 24 24 24 24 24 24 24 24 24 24 24
36 36 36 36 36 36 36 36 36 36 36 36
48 48 48 48 48 48 48 48 48 48 48 48
60 60 60 60 60 60 60 60 60 60 60 60
66 66 66 66 66 66 66 66 66 66 66 66
72 72 72 72 72 72 72 72 72 72 72 72
84 84 84 84 84 84 84 84 84 84 84;

【问题讨论】:

  • 第二个(宏变量)你想做什么?这看起来非常笨拙。

标签: sas dataset repeat


【解决方案1】:
data test; 
    do index= 1 to 84;
        output;
    end;
run;

data test2; 
array num [7] (24 36 48 60 66 72 84);
    do i = 1 to dim(num);
        do j = 1 to 12 ;
            index = num[i];
            output;
        end;
    end;
run;    
proc sql noprint;
    select index into :Term separated by " " from test2;
    quit;
    %put &Term.;

或者不使用数据集:

data _null_; 
length term $3000;
array num [7] (24 36 48 60 66 72 84);
    do i = 1 to dim(num);
        do j = 1 to 12 ;
            term = catx(" ",term,num[i]);
        end;
    end;
call symput('Term',term);
run;
%put &Term.;

如果您以偶数步数递增,您可以在循环中使用by,例如

data _null_; 
length term $3000;
    do index= 24 by 12 to 84;
        do i = 1 to 12 ;
            term = catx(" ",term,index);
        end;
    end;
call symput('Term',term);
run;
%put &Term.;

【讨论】:

    猜你喜欢
    • 2015-03-22
    • 2018-02-24
    • 2011-04-06
    • 1970-01-01
    • 2019-05-16
    • 1970-01-01
    • 2020-01-30
    • 2014-10-09
    • 1970-01-01
    相关资源
    最近更新 更多