【问题标题】:Populate fields in SAS by ID and Date按 ID 和日期填充 SAS 中的字段
【发布时间】:2019-02-24 07:30:03
【问题描述】:

我的数据集如下所示:

AsAtDate  ReleaseDate ID Var1 Var2 ... Var5
200701     200601      1   x    .    
200702     200601      1   .    a
200703     200601      1   .    .
200701     200702      2   .    b 
200702     200702      2   y    b
200703     200702      2   y    .
200702     200501      3   z    .
200703     200501      3   .    .

我希望我的结果如下所示:

AsAtDate  ReleaseDate ID Var1 Var2 ... Var5
200701     200601      1   x    a    
200702     200601      1   x    a
200703     200601      1   x    a
200701     200702      2   .    . 
200702     200702      2   y    b
200703     200702      2   y    b
200702     200501      3   z    .
200703     200501      3   z    .

如果 ReleaseDate 早于 AsAtDate 然后按 ID 填充字段,我如何让我的数据考虑 ReleaseDate。

【问题讨论】:

  • 请发布您尝试过的任何内容。您可能正在查看排序并保留在这里。是否可以有不同的值?
  • @Reeza 我尝试了排序和保留,但似乎无法正常工作

标签: macros sas retain locf


【解决方案1】:

在您的解决方案的基础上,我们可以添加 CASE 语句以根据需要有条件地填写数据。

proc sql;
create table want as
select *, 
       case when ReleaseDate>AsAtDate then " " 
       else max(Var1) 
       end as _Var1
from have
group by ID
order by ID, AsAtdate;
quit;

【讨论】:

    【解决方案2】:

    我试过下面的代码,还有比这更简化的代码吗?

    proc sql;
    create table want as
    select *, max(Var1) as _Var1
    from have
    group by ID
    order by ID, AsAtdate;
    quit;
    
    data want1;
    set want;
    by id;
    if ReleaseDate > AsAtDate then _Var1='';
    run; 
    

    【讨论】:

    • 您可以使用 CASE 语句将最后一步添加到 PROC SQL 查询中,但除此之外,它看起来非常紧凑。
    猜你喜欢
    • 2011-12-23
    • 2023-04-08
    • 2011-08-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-03-20
    • 2013-06-28
    相关资源
    最近更新 更多