我有一个类似这样的数据:
Subject Treatment X
1 1 X12
2 2 X12
3 3 X13
4 1 X11
5 2 X13
6 3 X12
7 1 X11
8 2 X12
9 1 X11
10 3 X13
我必须使用变量Z来计算X的数量,因此Z11 = X11的数量,Z12 = X12的数量,依此类推,但是如果X和T中的最后一个数字相同,则将一个加到分配中。
因此,如果T = 1,则Z11 = X11 + 1;如果T = 2,则Z12 = X12 + 1;如果T = 3,则Z13 = X13 + 1;但是如果最后一个数字和T彼此不对应,则它将保持不变相同的Z11 = X11,Z12 = X12和Z13 = 13。我正在使用proc sql来计算分配,但每次循环经过另一个主题时,都没有如何添加1。
proc sql;
create table new1 as select
sum(y="X11")+1 as z11,
sum(y="X12") as z12,
sum(y="X13") as z13
from dynamic;
quit;
任何帮助将不胜感激。
答案 0 :(得分:0)
我不确定您想要的是什么,但是我会在数据步骤中创建所需的变量,然后对总数求和。
data have;
input Subject Treatment X $;
datalines;
1 1 X12
2 2 X12
3 3 X13
4 1 X11
5 2 X13
6 3 X12
7 1 X11
8 2 X12
9 1 X11
10 3 X13
;
data have;
set have;
z11 = 0;
z12 = 0;
z13 = 0;
if x="X11" then do;
z11 = z11 + 1;
if Treatment=1 then
z11 = z11+1;
end;
else if x="X12" then do;
z12 = z12 + 1;
if Treatment=2 then
z12 = z12 + 1;
end;
else if x="X13" then do;
z13 = z13 + 1;
if Treatment=3 then
z13 = z13+1;
end;
run;
proc summary data=have;
var z:;
output out=want sum=;
run;
产生:
_TYPE_ _FREQ_ z11 z12 z13 0 10 6 6 5
如果需要,可以删除_TYPE_
和_FREQ_
变量。