【问题标题】:SAS: Keeping observations that have a specified date intervalSAS:保留具有指定日期间隔的观察结果
【发布时间】:2013-02-11 18:19:33
【问题描述】:

我有一个看起来像这样的数据集:

    Unique_ID Date    
    1         03/23/1995
    1         03/27/1995
    1         04/14/1995
    1         08/29/1995
    1         02/14/1996
    .         .
    .         .
    .         .
    1         03/19/1997
    2         10/20/1993
    .         .
    .         .
    .         .
    2         04/20/2000

在每个 Unique_ID 中,我只需要保留从第一次观察开始的日期至少相隔 3 个月的观察(我的数据集按 Unique_ID 和日期排序)。例如,在 Unique_ID 1 内,我需要保留距 1995 年 3 月 23 日至少 90 天的下一个观测值,然后是距那一天 90 天的下一个观测值,依此类推。有人可以用宏或某种循环为我指明正确的方向吗?

【问题讨论】:

  • SAS 中最重要的循环是你每天都在使用的循环……数据步进循环!

标签: sas sas-macro


【解决方案1】:

你可以试试这样的:

data want;
   set have;
      by ID;
   retain date2find;
   if first.ID then do;
      output;   /* This statement will include the first obs from each    */
                /* set of IDs if desired.  If not, delete this statement. */
      date2find = DATE + 90;
      end;

   if DATE >= date2find then do;
      output;                /* Output the found record    */
      date2find = DATE + 90; /* Re-set to date to be found */
      end;
   drop date2find;
run;

这取决于您的数据集按照描述(按 ID 和 DATE)进行排序

【讨论】:

  • +1 虽然我认为 OP 也想保留第一个记录。
  • @Cyborgx37 好点,还不清楚。我会更新答案。
  • @ Bob Duell 感谢您的解决方案!我不知道可以以这种方式使用保留语句。
  • 这就是 RETAIN 所做的[防止变量在每个数据步循环开始时重新初始化]。其他用途只是使用 RETAIN 相对简单的语法来发挥自己的优势[比如使用它重新排序数据集上的变量]。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多