sql - SAS SQL 中的枢轴翻译,更简单?
问题描述
我正在尝试在 SAS proc SQL 中进行枢轴翻译,并且我已经得到了我想要的数据集。但我正在寻找更简单的程序,没有重复的程序“max(case when NO = # then ### end) as ##”,或者更好的方法。如果你有好的,请给我一些建议。
data test;
input ID $ NO TIM $;
cards;
1 1 8:31
1 2 8:32
1 3 8:33
1 4 8:34
2 1 8:35
2 2 8:36
2 3 8:37
2 4 8:38
3 1 8:41
3 2 8:42
3 3 8:43
3 4 8:44
;
run;
proc sql;
create table test2 as
select ID,
max(case when NO = 1 then TIM end) as A1,
max(case when NO = 2 then TIM end) as B1,
max(case when NO = 3 then TIM end) as C1,
max(case when NO = 4 then TIM end) as D1
from test group by ID;
quit;
/*
test2 : I want this dataset
ID A1 B1 C1 D1
1 8:31 8:32 8:33 8:34
2 8:35 8:36 8:37 8:38
3 8:41 8:42 8:43 8:44
*/
解决方案
看起来像一个简单的转置步骤。您可以使用 ID 语句告诉它使用一个或多个变量的值来构造变量名称。您可以使用 PREFIX= 选项设置变量的基本名称。因此,此代码将从您的示例数据中生成名为 VAR1、VAR2、VAR3 和 VAR4 的变量。
proc transpose data=test out=want(drop=_name_) prefix=VAR ;
by id;
id no;
var tim;
run;
如果您希望变量以您显示的方式命名,那么您将需要构建某种方式将 1 转换为“A1”,将 2 转换为“B1”等。例如,您可以定义将 1 映射到“A1”的格式'。
proc format ;
value abc 1='A1' 2='B1' 3='C1' 4='D1';
run;
proc transpose data=test out=want(drop=_name_);
by id;
id no;
var tim;
format no abc.;
run;
推荐阅读
- apache-kafka - 如何从 kafka 中读取已经提交的消息
- sql-server - 如何在 sql server 的动态查询中检查 IS NULL
- flutter - 在 gridview 中加载大量数据时应用程序崩溃
- python - 基于 csv 字典创建多个目录 - python
- mysql - 不知道密钥时如何获取 MYSQL JSON 对象值?
- c++ - 在裸机控制器上的不同上下文中在 int 变量中设置一个标志
- database - 表中的 sym 列是否起特殊作用?
- azure - Bot 使用 azure bot 框架开发并部署在团队频道中。它在团队桌面/网络应用程序中运行良好,但在移动安卓应用程序中运行良好
- tibco-ems - express route 是否解决了 tibco ems 服务器和 azure 虚拟机之间的连接问题?
- git - 仅 Git rebase 未推送的提交