【问题标题】:Create variables with years based on the start and end dates根据开始和结束日期创建带有年份的变量
【发布时间】:2018-08-28 15:26:33
【问题描述】:

我需要创建变量来标记患者接受治疗的年份。 我的数据集看起来像这样(数据包括治疗期,因此 1 名患者可以接受多行不同的治疗):

ID/atc_label/sdate/enddate

1 / 维生素 D / 2005 年 10 月 31 日 / 2005 年 1 月 24 日

1 / 类固醇 / 2008 年 10 月 31 日 / 2015 年 1 月 24 日

2 / 类固醇 / 15Oct2005 / 21Dec2010

3 / 系统性/ 15Oct2007 / 21Dec2017

...

我需要创建变量 2005, 2006, 2007, 2008, 2009.. 直到 2018 年。如果在今年使用治疗,它将保持正确的 atc_label 值。

我确实从 Year 函数开始,但我不知道如何在开始日期和结束日期之间创建中间变量。 我将不胜感激有关如何解决此问题的任何想法。

【问题讨论】:

  • 请发布更多数据行来说明您的数据的格式并显示您尝试过的任何内容。您可以为初学者使用 YEAR() 函数来查找期间的开始/结束。您是否提前知道需要多少年变量和周期?
  • 嗨,Reeza。 2005-2018 年我需要它。我只需要标记治疗是否在这一年发生。
  • 您确实需要展示您将来尝试过的(代码),所以不是代码编写服务。我们非常乐意帮助您解决显示尝试的问题。

标签: sas


【解决方案1】:

最简单的方法是使用数组,以年份为索引。

data want;
set have;

*declare array variables to hold flags;
array flags(2000:2018) flag2000-flag2018;

*set to missing to avoid carry over from previous line;
call missing(of flags(*));

*calculate start and end years based on dates;
year_start =year(sdate);
year_end = year(enddate);

*loop and set years to 1 between year start and end;
do year=year_start to year_end;
    flags(year) = 1;
end;

run;

【讨论】:

    【解决方案2】:

    我花了一段时间才弄清楚如何使代码工作。

    这是我需要的解决方案:

    data want;
    set have;
    
    *calculate start and end years based on dates;
    year_start =year(stdt);
    year_end = year(enddt);
    
    run;
    
    
    data want;
    set have;
    
    *declare array variables to hold flags;
    array flags(2010:2018)$ flag2010-flag2018;
    
    *set to missing to avoid carry over from previous line;
    call missing(of flags(*));
    
    *loop and set years to 1 between year start and end;
     do year = year_start to year_end by 1;
     flags(year) = atc_label;
    end;
    
    run;
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-11-20
      • 1970-01-01
      • 2014-03-02
      • 1970-01-01
      • 2020-10-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多