我想创建一个顺序索引变量。例如,我在网站中有唯一的网站和部分:
网站1 1 2 2 3 3
A节B A B A B
网站部分组合是唯一的。我想要一个唯一的顺序索引变量,以便站点1,段A = 1和站点1,段B = 2和站点2段A = 3,依此类推。
网站1 1 2 2 3 3
A节B A B A B
指数1 2 3 4 5 6
我先尝试过使用过。最后。 do循环的函数,我只是想不出来。无论如何,我对do循环并不是很好。谢谢你的帮助!
答案 0 :(得分:1)
您的解决方案非常合理,特别是如果您不确定是否只有站点部分的唯一值。如果您确定它们是唯一的(因此,NODUPRECS不会删除任何内容),那么您可以简化它并删除合并:
data final;
set dataset;
sectionIndex+1;
run;
如果您希望它们按正确的顺序排序,可以选择在datastep之前进行排序。
如果你想避免合并(如果数据集非常大)并且你不确定它们是否是唯一的,那么你可以这样做:
proc sort data=dataset;
by site section;
run;
data final;
set dataset;
by site section;
if first.section then sectionIndex+1;
run;
这不需要NODUPRECS或NODUPKEY,并节省了一些处理时间。
我不认为DO循环会有所帮助,除非你做了一些更复杂的事情(需要一个DoW循环或类似的东西)。
答案 1 :(得分:0)
我不知道如何使用do循环执行此操作,但显然可以使用proc排序和数据合并来完成。创建仅保留用于创建索引的分类变量的数据集,然后使用noduprescs排序以删除重复项。添加带有+1的索引变量。然后合并回原始数据集。
data sitesections;
set dataset;
keep site section;
proc sort data=sitesections out=sitesections2 noduprecs;
by site section;
data sitesections_final;
set sitesections2;
sectionindex +1;
data final;
merge sitesections_final dataset;
by site section;
run;