【问题标题】:SAS conditionally filling rowsSAS有条件地填充行
【发布时间】:2015-08-14 08:04:11
【问题描述】:
data have;
infile cards missover;
input scrssn :$11. year FIPS :$5.;
cards;
111-22-3333 2008 
111-22-3333 2009 
111-22-3333 2010 09990
111-22-3333 2011 
111-22-3333 2012 08880
111-22-3333 2013 
111-22-3333 2014 
333-44-5555 2009 
333-44-5555 2010 67897
333-44-5555 2011 
333-44-5555 2012 56789
333-44-5555 2013 
333-44-5555 2014 67899
333-44-5555 2015
333-44-5555 2016
333-44-5555 2017
333-44-5555 2018
;
run;

我想要数据

111-22-3333 2008 
111-22-3333 2009 
111-22-3333 2010 09990
111-22-3333 2011 09990
111-22-3333 2012 08880
111-22-3333 2013 
111-22-3333 2014 
333-44-5555 2009 
333-44-5555 2010 67897
333-44-5555 2011 67897
333-44-5555 2012 56789
333-44-5555 2013 56789
333-44-5555 2014 67899
333-44-5555 2015
333-44-5555 2016
333-44-5555 2017
333-44-5555 2018

对于每个 scrssn,我想用前一个 FIPS 填充后续 FIPS,但在可用 FIPS 的最后一行停止

非常感谢!!!

【问题讨论】:

  • 如果你展示一些你已经写过的代码会更好,所以这不是一个代码编写服务。通过组处理查看retain 语句、missing 函数和first.last.。尝试编写代码,如果它不起作用,请发布您所做的,我们会提供帮助
  • 您可以对代码进行后处理,还是希望将其完成到输入数据步骤中?

标签: sas


【解决方案1】:

试试这个解决方案。

Proc Sort Data=have Out=have_sorted ;
By  scrssn;
Run;

Data test;
set have_sorted;
retain R_var ;
by scrssn;
if FIPS then r_var=Fips;
if last.scrssn then R_var='';
FIPS=R_var;
drop R_var;
run;

使用 retain 将 FIPS 值保留在新变量中,然后将其重新分配给 FIPS。如果它是最后一个按组,则将保留变量设为空白(缺失)。

【讨论】:

  • 嗨乔纳斯,非常感谢!我还有一个问题,因为如果我只想填补中间的空白,如果最后几个观察有多行怎么办,那么我不能简单地将所有最后一个观察都清空。再次感谢!
  • @Daniel Luo 我不明白你的问题。请澄清一下,或者更好的是,将其作为一个新问题发布。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-10-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-11-27
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多