【发布时间】:2015-11-16 14:21:28
【问题描述】:
我在一个大型数据集中有数十万个 ID。
有些记录的 ID 相同,但数据点不同。其中一些 ID 需要合并为一个 ID。多次注册系统的人应该只是数据库中的一个人。
我还有一个单独的文件告诉我哪些 ID 需要合并,但这并不总是一对一的关系。例如,在许多情况下,我有 x->y,然后是 y->z,因为它们注册了 3 次。我有一个宏,它基本上是以下一组 if-then 语句:
if ID='1111111' then do; ID='2222222'; end;
if ID='2222222' then do; ID='3333333'; end;
我相信 SAS 会一次运行这一记录。我的合并 ID 列表几乎有 15k 长,因此它需要很长时间才能运行,而且列表只会变得更长。有没有更快的更新这些 ID 的方法?
谢谢
编辑:这是一个例子,除了宏由于所有的合并而超过 15k 行。
data one;
input ID $5. v1 $ v2 $;
cards;
11111 a b
11111 c d
22222 e f
33333 g h
44444 i j
55555 k l
66666 m n
66666 o p
;
run;
%macro ID_Change;
if ID='11111' then do; ID='77777'; end; *77777 is a brand new ID;
if ID='22222' then do; ID='88888'; end; *88888 is a new ID but is merged below;
if ID='88888' then do; ID='99999'; end; *99999 becomes the newer ID;
%mend;
data two; set one; %ID_Change; run;
【问题讨论】:
-
请编辑您的问题以显示一些输入记录的示例结构和带有一些示例记录的“单独文件”结构(平面文件/SAS 数据集等)以及您想要的输出根据示例输入记录看起来像。
标签: sas