SAS 根据另一个数据集中的值填充字段

问题描述 投票:0回答:1

我知道我以前做过这件事,应该不难。 。 。但我对如何有效地做到这一点一无所知。

我有两张桌子:

表1

主要ID 类型ID
1001 A
1001 B
1001 C
1002 B
1003 C
1004 A
1004 C
1005 B

表2

主要ID 值A 值B 值C
1001 12 0.22 0.042
1002 10 0.19 0.039
1003 9 0.18 0.036
1004 14 0.3 0.062
1005 5 0.12 0.028

我想根据表 2 中的值在表 1 中创建一个新字段(值),该值对应于与 PrimaryID 匹配的行中的 TypeID

想要

主要ID 类型ID 价值
1001 A 12
1001 B 0.22
1001 C 0.042
1002 B 0.19
1003 C 0.036
1004 A 14
1004 C 0.062
1005 B 0.12

提前致谢

sas
1个回答
0
投票

只需修复表二,使其成为有用的形式。

首先让我们将您的列表转换为实际数据。

data table1 ;
  input primaryID $ TypeID $;
cards;
1001 A
1001 B
1001 C
1002 B
1003 C
1004 A
1004 C
1005 B
;

data table2;
  input primaryID $ valueA valueB valueC ;
cards;
1001 12 0.22 0.042
1002 10 0.19 0.039
1003 9 0.18 0.036
1004 14 0.3 0.062
1005 5 0.12 0.028
;

您可以使用 PROC TRANSPOSE 将这些多个变量转换为多个观测值。

proc transpose data=table2 out=tall;
  by primaryid;
  var value: ;
run;

然后使用简单的数据步骤来梳理类型和名称。

data tall ;
  set tall;
  length typeid $8;
  typeid = substr(_name_,6);
  rename col1=value;
run;

现在您可以合并或加入,因为类型可供比较。

proc sql;
create table want as 
  select a.primaryid, a.typeid, b.value
  from table1 a left join tall b
  on a.primaryid = b.primaryid and a.typeid = b.typeid
  order by 1,2
;
quit;
© www.soinside.com 2019 - 2024. All rights reserved.