我目前正在研究SAS中的数据集,如下所示:
people - word - date - rank
A - bla - 01/01/2017 - 1
A - bla - 02/01/2017 - 2
A - 测试 - 03/01/2017 - 3
B - bla - 01/01/2017 - 1
B - 测试 - 09/01/2017 - 2
C - bla - 03/01/2017 - 1
C - 测试 - 05/01/2017 - 2
C - test - 07/01/2017 - 3
C - sas - 08/01/2017 - 4
我想像这样改变它:
people - word - rank
A -------- bla ----- 1
A --------测试----- 2
B -------- bla ----- 1
B --------测试----- 2
C -------- bla ----- 1
C --------测试----- 2
C -------- sas ----- 3
排名取决于日期,按人群分组。
我尝试使用延迟功能,但也使用了情况的语法(它有效但我必须为每个案例执行此操作,并且我的最高等级为94 ......不是很容易!)
所以我找不到最后一张桌子的好方法。
你能帮助我吗?
非常感谢
答案 0 :(得分:0)
虽然在此网站上发布您尝试过的代码是一个很好的协议,但我认为它不会对此有所帮助,因为lag
和case when
不是可行的方法。
基本上,您正在尝试删除重复的单词条目并重新定位您的排名列。您可以在单个数据集中实现此功能,利用first.
处理,这在使用by
语句时可用。
对于排名,最简单的方法是在数据步骤移过记录时从头开始完全重建。
data have;
input people $ word $ date :ddmmyy10. rank;
format date ddmmyy10.;
datalines;
A bla 01/01/2017 1
A bla 02/01/2017 2
A test 03/01/2017 3
B bla 01/01/2017 1
B test 09/01/2017 2
C bla 03/01/2017 1
C test 05/01/2017 2
C test 07/01/2017 3
C sas 08/01/2017 4
;
run;
data want;
set have (drop=rank date); /* remove rank as being rebuilt; date not required */
by people word notsorted; /* enable first. processing; notsorted option required as data not sorted by people and word */
if first.people then rank=0; /* reset rank when people value changes */
if first.word then do;
rank+1; /* increment rank by 1 for the first word (will ignore subsesquent duplicates) */
output; /* output row */
end;
run;