常用的转置写法有两种,可根据现实情形进行筛选
(1)方法1:#1 篇有谈到case when语句的查询和分类的功能,其实,case when通过分类功能还有个更重要的实现目标——转置,要达到的目的很机动灵活,麻烦就是需要手动写很多的分类,需要对数据逻辑有很清楚的认识。如下举例:
A. 先导入数据
data credit_score;
input name $ credit_score grade $ company $;
datalines
;
lily 998 A 1
tom 889 B 1
anly 990 A 1
judy 605 C 3
lin 805 B 2
ting 850 B 2
jim 956 A 3
;
RUN;
B. 使用sql步调用case when语句
proc sql;
create table kind1 as
select name
,company
,max(case grade when "A" then credit_score else 0 end ) as A
,max(case grade when "B" then credit_score else 0 end ) as B
,max(case grade when "C" then credit_score else 0 end ) as C
from credit_score
group by name,company
;
quit;
C. 结果如下图,转置的内容比较容易自己控制

(2)方法2:使用SAS的transpose步,实现转置,先将上例按照transpose步实现如下:
A. 先按照name company两个字段排序(这里需要注意的是:在sql步里分组的两个字段是无需提前排序的)
proc sort data=credit_score;
by name company;
run;
B. 调用transpose步
proc transpose data=credit_score out=kind2 prefix=n_ name=old_var;
by name company;
id grade;
var credit_score;
run;
C. 结果如下图,虽然展现出来的数据没有SQL步的数据干净利落,但是好在是傻瓜式,选择好需要转置的内容和条件,直接导出数据:

我把官网写的知识点看完后,整理出如下的点,如果有兴趣的小伙伴可以翻阅下面的连接,官网的SAS支持是个好东西,是市面最详细的讲解材料,没有之一,一万个推荐
https://documentation.sas.com/?docsetId=proc&docsetTarget=n1xno5xgs39b70n0zydov0owajj8.htm&docsetVersion=9.4&locale=endocumentation.sas.comA. OPTION含义
PROC TRANSPOSE <DATA=input-data-set> <DELIMITER=delimiter> <INDB=YES|NO><LABEL=label> <LET> <NAME=name> <OUT=output-data-set> <PREFIX=prefix><SUFFIX=suffix>;
- DATA=input-data-set:输入的数据集
- DELIMITER=delimiter:间隔符
- LABEL= label:曾经的字段含义
- LET:允许ID变量(纵轴变量)重复
- NAME= name:“以前的变量”字段,加上字段名可以重新命名字段名,若无则_name_
- OUT= output-data-set:导出数据的名字
- PREFIX= prefix:在转置的纵轴字段
B. 步骤含义
- BY variable(s):纵轴变量(需要group by的变量)
- ID variable(s) :横轴变量(需要转置的变量)
- VAR variable(s):值内容(在表内的数值展示的变量)
好啦 ,今天的转置就分享这两个最常用最好用的方法,希望也有更好用的方法,我们私信交流