在SAS中创建和比较时间间隔

时间:2017-10-23 19:39:55

标签: sas

我有一个个人数据库' SAS中的地址如下:
         

OBS    ID    addresstype    effectivedate    enddate    postalcode

1      1          M            Feb2000       Jan2003      A1A1A1    
2      1          R            Jan2003       Jan2020      B2B2B2
3      1          M            Feb2016       Sep2016      C3C3C3
4      1          M            Sep2016       Jan2020      D4D4D4


地址是住宅(R)或邮寄(M)。 对于每个人和每个时间段,如果我有住址,我想保留该地址并删除该段时间内的任何邮寄地址。如果在一段时间内没有记录住址,那么我会保留邮寄地址。对于此示例的个人,我希望干净的数据如下所示:   

OBS   ID    addresstype    effectivedate    enddate    postalcode

1     1          M            Feb2000       Jan2003      A1A1A1    
2     1          R            Jan2003       Jan2020      B2B2B2


SAS中是否有任何方法可以根据两个日期(本示例中为effectivedate和enddate)创建时间间隔,然后将它们相互比较。在此先感谢您的帮助。

1 个答案:

答案 0 :(得分:0)

假设每个客户都有1个住宅地址, 1)

  1. 您可以将数据集分为两个 - ds_M和ds_R。
  2. impute日期并在validDate中连接01,在enddate中连接30 每个数据集并使用input函数和date9.格式
  3. 将它们转换为数字
  4. 重命名ds_R中的列,addresstype(您可以在下一步合并时删除它),effectiveDate&结束
  5. merge数据集并比较间隔,您可以用每个行标记 标志然后子集基础 - 调用此数据集ds_semi
  6. append ds_semi& ds_R创建最后一个
  7. 或者,您可以在主数据集中执行第2步,然后查看point option的{​​{1}}以及如何在{{set中执行另一个set和另一个set 1}}可能会为您创建类似的输出。然而,这可能需要事先进行一些预处理,但它会一步完成。

    你可以参考我下面的代码我曾经用来解决类似的问题,即在多行中找到值的差异来做出决定和分配值 -

    do loop