sql 转置_#2 转置的两种方法在SAS中的实际应用

本文分享了两种常用的SQL转置方法。方法一是使用case when语句,能灵活控制转置内容,但需手动写很多分类,要清楚数据逻辑;方法二是使用SAS的transpose步,操作简单,选好转置内容和条件即可导出数据,还介绍了官网相关知识点。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

常用的转置写法有两种,可根据现实情形进行筛选

(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. 结果如下图,转置的内容比较容易自己控制

1e748e57606a4034cc7176f77deffd60.png

(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步的数据干净利落,但是好在是傻瓜式,选择好需要转置的内容和条件,直接导出数据:

68fcd56c9b7f4a3c5cd05792edd4cda1.png

我把官网写的知识点看完后,整理出如下的点,如果有兴趣的小伙伴可以翻阅下面的连接,官网的SAS支持是个好东西,是市面最详细的讲解材料,没有之一,一万个推荐

https://documentation.sas.com/?docsetId=proc&docsetTarget=n1xno5xgs39b70n0zydov0owajj8.htm&docsetVersion=9.4&locale=en​documentation.sas.com

A. 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):值内容(在表内的数值展示的变量)

好啦 ,今天的转置就分享这两个最常用最好用的方法,希望也有更好用的方法,我们私信交流

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值