楼主: jiaqitang11
688 9

[问答] 转置数据表问题 [推广有奖]

  • 0关注
  • 0粉丝

高中生

57%

还不是VIP/贵宾

-

威望
0
论坛币
5 个
通用积分
0.0057
学术水平
2 点
热心指数
0 点
信用等级
0 点
经验
176 点
帖子
18
精华
0
在线时间
33 小时
注册时间
2021-5-23
最后登录
2023-9-12

相似文件 换一批

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

求职就业群
赵安豆老师微信:zhaoandou666

经管之家联合CDA

送您一个全额奖学金名额~ !

感谢您参与论坛问题回答

经管之家送您两个论坛币!

+2 论坛币
请看我的EXCEl 附件,左表是原数据,想把日期列里的数值转为列名,另外三列member,cost,unit 转为行。 右表是转换后的样子。

用了SAS 里的transpose function, 可是转置后,日期列名并不是按顺序排列(07/2020-06/2021), 因为表中service code 这一列,并不是每个月都有数值,所以转置后,顺序就乱了。我需要日期列标头按顺序排列。

大神们有其它的方法转置吗?

data.xlsx (20.19 KB)

transpose.png





二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

关键词:数据表 Transpose function service Member

沙发
jiaqitang11 发表于 2022-1-26 10:39:56 |只看作者 |坛友微信交流群
附件

transpose.xlsx

20.14 KB

使用道具

藤椅
HXAI102230 在职认证  发表于 2022-1-26 13:04:55 |只看作者 |坛友微信交流群
proc sql;
  select distinct date
        into :dlist separated by ' '
        from b_trans;
quit;

proc transpose data=b_trans out=a_trans1(drop=_label_ rename=(_name_=measure));
  by provider_id service_code;
        id date;
run;

data a_transx;
  if 0 then set b_trans(keep=provider_id service_code);
  length measure $8 &dlist 8;
  set a_trans1;  
        by provider_id service_code;
run;

使用道具

板凳
jiaqitang11 发表于 2022-1-27 09:22:14 |只看作者 |坛友微信交流群
运行有错误呀,最后那一段代码?
      
data a_transx;
  if 0 then set b_trans(keep=provider_id service_code);
  length measure $8 &dlist 8;
  set a_trans1;  
        by provider_id service_code;
run;
NOTE: Line generated by the macro variable "DLIST".
48          2019M07 2019M08 2019M09 2019M10 2019M11 2019M12 2020M01 2020M02 2020M03 2020M04 2020M05 2020M06 2020M07 2020M08 2020M09
            ____
            22
48       ! 2020M10 2020M11 2020M12 2021M01 2021M02 2021M03 2021M04 2021M05 2021M06 2021M07 2021M08 2021M09 2021M10 2021M11 2021M12
ERROR 22-322: Syntax error, expecting one of the following: a name, _ALL_, _CHARACTER_, _CHAR_, _NUMERIC_.  

352: LINE and COLUMN cannot be determined.
NOTE: NOSPOOL is on. Rerunning with OPTION SPOOL might allow recovery of the LINE and COLUMN where the error has occurred.
ERROR 352-185: The length of numeric variables is 3-8.
352: LINE and COLUMN cannot be determined.

使用道具

报纸
HXAI102230 在职认证  发表于 2022-1-27 13:25:35 |只看作者 |坛友微信交流群
转置前 format date MONYY7.;
再试试呢

使用道具

地板
jiaqitang11 发表于 2022-1-28 04:02:09 |只看作者 |坛友微信交流群
format date MONYY7后,列的排序就不是按顺序来了。应该是 7/2020-6/2021. 可出来的结果 是 APR- 21 排在第一位了

使用道具

7
HXAI102230 在职认证  发表于 2022-1-28 09:58:36 |只看作者 |坛友微信交流群
我的程序一直没问题,是import导入的date格式问题么?
proc import datafile='........xlsx' out=b_trans dbms=xlsx replace;
getnames=yes;
run;   

使用道具

8
jiaqitang11 发表于 2022-1-28 11:02:38 来自手机 |只看作者 |坛友微信交流群
HXAI102230 发表于 2022-1-28 09:58
我的程序一直没问题,是import导入的date格式问题么?
proc import datafile='........xlsx' out=b_trans ...
如果我导入SAS后,日期那一列是字符型,JUL2020,AUG2020…,(或者是07/2020,08/2020,…),应该怎么改呢,都可以transpose,但转完之后,顺序是乱的。

使用道具

9
HXAI102230 在职认证  发表于 2022-1-28 13:11:36 |只看作者 |坛友微信交流群
我这date导入后是数值型的,你把导入后的数据集发给我看看。

使用道具

10
jiaqitang11 发表于 2022-1-31 07:05:19 |只看作者 |坛友微信交流群
搞明白了,原数据DATE 那个变量是字符型,几万行。我传上的EXCEL只是样本。现在我把DATE这一变量改为数值型了,可以出来结果了。

谢谢大神

使用道具

您需要登录后才可以回帖 登录 | 我要注册

本版微信群
加好友,备注cda
拉您进交流群

京ICP备16021002-2号 京B2-20170662号 京公网安备 11010802022788号 论坛法律顾问:王进律师 知识产权保护声明   免责及隐私声明

GMT+8, 2024-4-28 19:12