循环更新分配

时间:2018-07-02 19:13:47

标签: loops count sas

我有一个类似这样的数据:

 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;

任何帮助将不胜感激。

1 个答案:

答案 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_变量。

相关问题