sas教程 使用SAS求和多列



sas官网 (3)

我想要使​​用SAS添加多个列。

数据有:

D C1 C2 C3 C4 C5.....   
J 01 02 00 04 15 
F 05 00 09 11 00  
M 12 14 88 00 00
A 55 03 00 00 00  
M 67 00 00 00 00

我不想这样做

数据要;

Set Have;  
N1 = C1;  
N2 = C1+C2;  
N3 = C1+C2+C3;  
N4 = C1+C2+C3+C4; 
N5 = C1+C2+C3+C4+C5;
Keep N:    
Run; 

希望我的桌子看起来像这样。

数据表要

D N1  N2  N3  N4  N5.....   
J 01  03  03  07  22 
F 05  05  14  25  00  
M 12  26  114 00  00
A 55  58  00  00  00  
M 67  00  00  00  00

请注意,我将有很多列和数量会有所不同。 我需要一个动态代码,它会自动计算列数并执行计算。 我需要底部的三角形保持0,不要把它加起来。 在例子(J,C3)的情况下,如果有零值,则仍然需要执行。 我也需要它来保持秩序。 无法更改数据的顺序。


Answer #1
data c;
   infile cards firstobs=2;
   length id $1;
   array C[5];
   input (_all_)(:);
   cards;
D C1 C2 C3 C4 C5   
J 01 02 00 04 15 
F 05 00 09 11  .  
M 12 14 88  .  .
A 55 03  .  .  .  
M 67  .  .  .  .
;;;;
   run;
data score;
   retain _type_ 'SCORE';
   length _name_ $32;
   if 0 then set c;
   array c[*] c:;
   do n = 1 to dim(c);
      _name_ = cats('N',n);
      c[n] = 1;
      output;
      end;
   drop n;
   stop;
   run;
proc score data=c score=score out=new;
   var c:;
   run;

这是学习PROC分数的好机会。 您使用输入数据来创建简单的自定义评分数据,运行proc分数并完成。

data c;
   input C1-C4;
   cards;
01 02 03 04  
05 06 09 11  
12 14 01 02 
;;;;
   run;
data score;
   retain _type_ 'SCORE';
   length _name_ $32;
   if 0 then set c;
   array c[*] c:;
   do n = 1 to dim(c);
      _name_ = cats('N',n);
      c[n] = 1;
      output;
      end;
   drop n;
   stop;
   run;
proc score data=c score=score out=new;
   var c:;
   run;


Answer #2

你可以用数组来做到这一点。

首先生成一些假数据。 这有100个变量和100个观察。

data have;
array C[100];
do i=1 to 100;
    do j=1 to 100;
        c[j] = j;
    end;
    output;
end;
drop i j;
run;

现在,获得数字变量的计数:

data _null_;
set have;
array x[*] _numeric_;
call symput("nVar",dim(x));
stop;
run;

%put Number Variables = &nVar;

这告诉我Number Variables = 100 - 都很好。

现在使用数据步骤来完成你的总和。

data want;
set have nobs=nobs;
array x[&nVar] _numeric_;
array N[&nVar];

do i=1 to &nVar;
    do j=1 to i;
        if j <= (nobs - _n_ + 1) then
           N[i] = sum(N[i],x[j]);
        else 
           N[i] = 0; /*Change to missing (.) if needed*/
    end;
end;

keep N:;
run;

Answer #3

sas sum函数可以采取如下变量范围:

data work;
    c1=1;
    c2=2;
    c3=3;
    n=sum(of c1-c3);
run;