arrays - 具有多个 VAR 选项的 SAS 转置表
问题描述
我有一张桌子,看起来像:
ID NAME TYPE DATE_VALUE STRING_VALUE NUMBER_VALUE
1 revenue report_date 01jan2018
1 revenue name Revenue_12m
1 revenue code 1100
1 revenue sum 6000000
我希望它看起来像:
ID NAME report_date name code sum
1 revenue 01jan2018 Revenue_12m 1100 6000000
我的代码给出了错误的结果(3行):
proc transpose data=tab1 out=tab2;
by id name;
var number_value string_value date_value;
id type;
run;
解决方案
考虑 SQL 中的条件聚合,假设您的类型是少数项目:
proc sql;
create table output as
select ID, NAME,
MAX(case when TYPE = 'name' then STRING_VALUE else "" end) AS report_name,
MAX(case when TYPE = 'report_date' then DATE_VALUE else . end) AS report_date format=date9.,
MAX(case when TYPE = 'code' then NUMBER_VALUE else . end) AS code,
MAX(case when TYPE = 'sum' then NUMBER_VALUE else . end) AS sum
from raw
group ID, NAME;
quit;
输入
data raw;
infile datalines delimiter=',' DSD;
length NAME $ 7 TYPE $ 11 STRING_VALUE $11 NUMBER_VALUE 7;
input ID NAME $ TYPE $ STRING_VALUE $ NUMBER_VALUE DATE_VALUE date9.;
format DATE_VALUE DATE9.;
datalines;
1,revenue,report_date,,.,01jan2018
1,revenue,name,Revenue_12m,.,.
1,revenue,code,,1100,.
1,revenue,sum,,6000000,.
;
输出
ID NAME report_name report_date code sum
1 revenue Revenue_12m 01JAN2018 1100 6000000
推荐阅读
- ios - 有没有办法避免由于 Firebase/Google 依赖项更新而导致的崩溃?
- swift - 拉日期和我们作为变量 Xcode
- vue.js - 将事件从组件发送到路由器视图 - 糟糕的代码气味
- javafx - 将枚举值绑定到 FXML 中的 Combox
- node.js - 为什么 setImmediate() 比顺序代码运行得更快?
- javascript - AJAX.call 在除 Firefox 之外的所有浏览器中工作?
- ios - 按下按钮后使用导航启动地图应用程序
- html - Html5 - “内容”和相关类之间的断线
- dart - 将 FutureBuilder 与 setState 一起使用
- mysql - MySQL 日期/时间函数和时区问题