需要BASE SAS-PROC SQL代码。我有一张包含以下数据的表
ID Contact Preference_ID
1 1111111111 Preference1
1 Test1@test.com Preference2
1 3333333333 Preference4
2 4444444444 Preference1
2 Test5@test.com Preference5
在这里,我有ID,移动,电子邮件和Preference_ID列。 Preference_ID列可以接受从Preference1到Preference5的值
我想编写一个 Base SAS-Proc SQL查询,它可以为我提供以下格式的数据
ID Preference1 Preference2 Preference3 Preference4 Preference5
1 1111111111 test@test.com 3333333333
2 4444444444 Test5@test.com
意味着Preference_ID行应成为输出数据的列,并应根据ID按行逐行填写联系人详细信息。
答案 0 :(得分:0)
使用proc tranpose作为@Tom表示这很容易。 Proc SQL将涉及大量的硬编码。
data have;
input ID Contact:$20. Preference_ID:$11.;
datalines;
1 1111111111 Preference1
1 Test1@test.com Preference2
1 3333333333 Preference4
2 4444444444 Preference1
2 Test5@test.com Preference5
;
proc transpose data = have out=want(drop=_name_);
by id; id preference_id;
var contact;
run;
proc sql;
create table want as
select id,
max(case when Preference_ID="Preference1" then contact end) as Preference1,
max(case when Preference_ID="Preference2" then contact end) as Preference2,
max(case when Preference_ID="Preference3" then contact end) as Preference3,
max(case when Preference_ID="Preference4" then contact end) as Preference4,
max(case when Preference_ID="Preference5" then contact end) as Preference5
from have
group by id
;