【问题标题】:Renaming a repeated observation in SAS重命名 SAS 中的重复观察
【发布时间】:2016-02-03 20:17:12
【问题描述】:

所以我一直试图弄清楚如何在 SAS 中重命名 ID 变量(我制作了一个虚拟数据集来尝试这个,见下文)

DATA trial;
input hno $ y;
datalines;
a 1
a 2
a 3
a 4
b 3
b 5
cd 5
cd 6
cd 1
;
run;

而我需要做的是拥有所有a=1b=2cd=3 等等,但是代码需要可转移到具有大约 30,000 个观察值的数据集,所有这些都具有不同的 ID。我一直在玩 first.id 和 last.id 但绝对无济于事。有人可以帮忙吗?

提前谢谢你!

编辑 所以为了澄清,我需要产生输出的代码: a 1 1 a 2 1 a 3 1 a 4 1 b 3 2 b 5 2 cd 5 3 cd 6 3 cd 1 3

第三列是 ID 变量,每个唯一的 hno 值加一

【问题讨论】:

  • 你的问题不是很清楚。您是否尝试为数据集中第一个变量的每个唯一值设置一个序列号?
  • 没错。所以有一个 ID 变量,它是由 hno 变量组成的,每次有一个新的 hno 值时,它都会在 ID 号上加 1。之后我需要数据集看起来像这样:hno y ID a 1 1 a 2 1 a 3 1 a 4 1 b 3 2 b 5 2 cd 5 3 cd 6 3 cd 1 3 等。另外,提前道歉,因为我是这个网站的新手,不知道如何把它变成可读的格式!

标签: sas


【解决方案1】:

如果您的数据按 HNO 排序,这会将 HNO 编码为索引。 SAS 中的 RENAME 通常是指变量、数据集等对象。

DATA trial;
   input hno $ y;
   datalines;
a 1
a 2
a 3
a 4
b 3
b 5
cd 5
cd 6
cd 1
;
   run;
data trial2;
   set trial;
   by hno;
   if first.hno then id + 1;
   run;
proc print;
   run; 

如果您的输入未排序,则您使用 PROC Summary 创建并索引 ID 数据集,并使用 KEYed SET 添加 ID。

DATA trial;
   input hno $ y @@;
   datalines;
a 1 a 2 b 3 b 5 cd 5 cd 6 a 3 a 4
cd 1
;
   run;
proc summary nway data=trial;
   class hno;
   output out=index(drop=_type_ _freq_ rename=(_level_=id) index=(hno)) / levels;
   run;
proc print;
   run;
data trial2;
   set trial;
   set index key=hno/unique;
   run;
proc print;
   run;

【讨论】:

  • 哦,我的话,我不敢相信它是那么直截了当!老实说,非常感谢!
【解决方案2】:

你也可以试试format

proc format;
    value $ cn
    'a' = 1
    'b' = 2
    'cd' = 3
    ;
run;

DATA trial;
    input hno $ y;
    *format hno $cn.;
    id = put(hno, $cn.);
datalines;
a 1
a 2
a 3
a 4
b 3
b 5
cd 5
cd 6
cd 1
;
run;

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-05-14
    • 2020-03-26
    • 2022-01-03
    • 2018-09-20
    • 1970-01-01
    • 2023-03-08
    • 2011-08-07
    • 1970-01-01
    相关资源
    最近更新 更多