【发布时间】:2020-08-31 06:18:50
【问题描述】:
我有下表
+--------+----------+-----------+
| ID | var_name | var_value |
+--------+----------+-----------+
| 153879 | age | 35 |
+--------+----------+-----------+
| 153879 | gender | Male |
+--------+----------+-----------+
| 153879 | income | 1000 |
+--------+----------+-----------+
| 13527 | age | 18 |
+--------+----------+-----------+
| 13527 | gender | Male |
+--------+----------+-----------+
| 13527 | income | 20 |
+--------+----------+-----------+
| 14416 | age | 40 |
+--------+----------+-----------+
| 14416 | gender | Female |
+--------+----------+-----------+
| 14416 | income | 500 |
+--------+----------+-----------+
如何制作数据透视表,使结果看起来像这样
+--------+-----+--------+--------+
| ID | age | gender | income |
+--------+-----+--------+--------+
| 153879 | 35 | Male | 1000 |
+--------+-----+--------+--------+
| 13527 | 18 | Male | 20 |
+--------+-----+--------+--------+
| 14416 | 40 | Female | 500 |
+--------+-----+--------+--------+
我尝试通过以这种方式反复左加入表格来做到这一点:
data table;
input id $ var_name $ var_value $;
datalines;
153879 age 35
153879 gender Male
153879 income 1000
13527 age 18
13527 gender Male
13527 income 20
14416 age 40
14416 gender Female
14416 income 500
run;
Proc SQL;
Create table have as
Select a.ID
,b.var_value as age
,c.var_value as gender
,d.var_value as income
From (select distinct id from table) as a
Left Join (select * from table where var_name = 'age') as b
On a.id = b.id
Left Join (select * from table where var_name = 'gender') as c
On a.id = c.id
Left Join (select * from table where var_name = 'income') as d
On a.id = d.id;
Quit;
使用此代码我得到了所需的结果,但是,由于实际表要大几倍,并且包含 50 多个变量,我想知道是否有任何其他方法可以做到这一点,更有效和更短。
【问题讨论】:
标签: sas pivot-table