2010-07-09 88 views
0

问题是,如果其他执行,S的增量将无法完成。任何想法?如何在删除SAS中的观察期间保留操作?

data osszes_folyositas; 
set osszes_tabla; 
retain old_xname; 
retain s 0; 

if xname ne old_xname then 
do; 
    old_xname = xname; 
    s = 0; 
end; 
else 
do; 
    s = s + Foly_s_tott_t_rgyh_ban_HUF; 
    delete; 
end; 
run; 

回答

1

不知道你在做什么。但是,如果您的记录按“xname”排序,并且对于每个“xname”组只想汇总一个值,则可以尝试以下操作。

data sample; 

    input xname$1-6 myvalue; 

datalines;  
name01 5 
name01 1 
name02 3 
name02 8 
name02 4 
name03 7 
; 

data result; 
    set sample; 
    by xname; 

    retain s 0; 

    if first.xname then s=0; 
    s=s+myvalue; 
    if last.xname then output; 
run; 

proc print data=result; 
run; 

这为每个基团“的XName”的复位“s”和输出具有“S”设置为“myvalue的”跨该组的总和的最后一个记录。结果如下所示:

Obs xname  myvalue  s 

1  name01  1  6 
2  name02  4  15 
3  name03  7  7 
+0

谢谢,它的工作原理! – 2010-07-12 08:00:40

0

这种类型的任务可以通过称为DoW(也称为Do循环)的编程模式得到最好的处理。对于每个分组,初始化在循环之前和循环之后的观察输出之前。你能看到它真的有效吗?这paper是旧的,但必须阅读。

data sample; 
    input xname$1-6 myvalue; 
datalines;  
name01 5 
name01 1 
name02 3 
name02 8 
name02 4 
name03 7 
; 
run; 

proc sort data=sample; 
    by xname; 
run; 

data result; 
    if 0 then set sample; /* prep pdv */ 
    s = 0; 
    do until (last.xname); 
     set sample; 
     by xname; 
     s + myValue; 
    end; 
run; 

/* check */ 
proc print data=result; 
run; 
/* on lst 
Obs xname  myvalue  s 

    1  name01  1  6 
    2  name02  4  15 
    3  name03  7  7 
*/ 
+0

@常锺,在你的评论中你已经把/ * prep pdv * /。这是否意味着仅从样本数据集中获取变量名称? – Alph 2017-08-30 02:35:09