我想使用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)的情况。我还需要它来保持秩序。无法更改数据的顺序。
答案 0 :(得分:3)
sas sum函数可以采用如下变量范围:
data work;
c1=1;
c2=2;
c3=3;
n=sum(of c1-c3);
run;
答案 1 :(得分:2)
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 SCORE的好机会。您可以使用输入数据创建简单的自定义评分数据,运行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;
答案 2 :(得分:1)
您可以使用数组执行此操作。
首先生成一些假数据。这有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;