【问题标题】:SAS: How do I pick conditional observations per by-groupSAS:如何按组选择条件观察
【发布时间】:2012-07-10 19:58:34
【问题描述】:

我有一个 SAS 数据集,已根据需要对其进行排序。我想将它分成 BY 组,并且对于每个组,输出每个观察值,直到特定列中第一次出现特定值。

ID 号 C1 年 2 C3 日期 (DD/MM/YYYY) -------------------------------------------------- -------- AB123 4 B4 2008E OC 09/04/2008 AB123 3 B4 2008E EL 09/04/2008 AB123 2 B4 2008E ZZ 09/04/2008 AB123 1 B4 2008E OC 09/04/2008 AB123 0 B4 2008E ZZ 09/04/2008 AB123 1 B4 2008E OC 06/02/2008 AB123 0 B4 2008E ZZ 06/02/2008

这是一个BY组:数据集按ID、C1、Year2分组,按ID、C1、Year2、Date(desc)、No(desc)排序。 ID、C1 和 Year2 的更多实例可能出现在数据集中的任何位置,但 3 个变量定义了每个 BY 组。

我想输出每个 BY 组的所有观察结果,直到并包括 C3 中第一次出现的 ZZ。所以上面我想要前 3 个观察结果输出(或标记),然后转到下一个 BY 组。

任何帮助将不胜感激。如果您需要有关问题的更多详细信息,请告诉我。谢谢。

【问题讨论】:

    标签: sas


    【解决方案1】:

    这是一种可行的方法。

    data have;
    input ID $ No C1 $ Year2 $ C3 $ Date :DDMMYY10.;
    format date DDMMYY10.;
    cards;
    AB123   4   B4  2008E   OC  09/04/2008
    AB123   3   B4  2008E   EL  09/04/2008
    AB123   2   B4  2008E   ZZ  09/04/2008
    AB123   1   B4  2008E   OC  09/04/2008
    AB123   0   B4  2008E   ZZ  09/04/2008
    AB123   1   B4  2008E   OC  06/02/2008
    AB123   0   B4  2008E   ZZ  06/02/2008
    ;
    run;
    
    data want (drop=stopflag);
    set have;
    by id c1 year2;
    retain stopflag;
    if max(first.id,first.c1,first.year2)=1 then stopflag=0;
    if c3='ZZ' and stopflag=0 then do;
        output;
        stopflag=1;
    end;
    if stopflag=0 then output;
    run;
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-11-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多