1

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

站点 1 1 2 2 3 3

ABABAB 节

站点-部分组合是独一无二的。我想要一个唯一的顺序索引变量,以便站点 1、部分 A=1 和站点 1、部分 B=2 和站点 2 部分 A=3,依此类推。

站点 1 1 2 2 3 3

ABABAB 节

索引 1 2 3 4 5 6

我试过先用。最后。带有do循环的函数,我就是想不通。无论如何,我对do循环不是很好。谢谢你的帮助!

4

2 回答 2

1

您的解决方案是完全合理的,特别是如果您不确定是否只有站点部分的唯一值。如果您确定它们是唯一的(因此,NODUPRECS 不会删除任何内容),那么您可以简化它并删除合并:

data final;
set dataset;
sectionIndex+1;
run;

如果您希望它们以正确的顺序排列,可以选择在数据步之前进行排序。

如果您想避免合并(如果数据集非常大)并且您不确定它们是唯一的,那么您可以这样做:

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 循环或类似的东西)。

于 2012-10-19T15:15:37.967 回答
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;
于 2012-10-19T14:50:09.457 回答