SAS:如何根据字符串变量创建索引变量?

时间:2012-10-19 14:25:47

标签: indexing sas

我想创建一个顺序索引变量。例如,我在网站中有唯一的网站和部分:

网站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循环并不是很好。谢谢你的帮助!

2 个答案:

答案 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;