基本SAS-Proc SQL

时间:2019-01-11 13:17:31

标签: sas

需要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按行逐行填写联系人详细信息。

1 个答案:

答案 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
 ;