楼主: davyin
2831 10

[问答] 如何转署这样的数据表(通过变量名及变量值产生新变量) [推广有奖]

  • 3关注
  • 0粉丝

高中生

42%

还不是VIP/贵宾

-

威望
0
论坛币
1040 个
通用积分
0
学术水平
0 点
热心指数
0 点
信用等级
0 点
经验
408 点
帖子
21
精华
0
在线时间
32 小时
注册时间
2008-3-14
最后登录
2020-3-7

楼主
davyin 发表于 2013-6-20 09:03:07 |AI写论文

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

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

经管之家联合CDA

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

感谢您参与论坛问题回答

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

+2 论坛币
我有一张SAS表,格式如下,现在希望转换成另一种表的格式。新表的统计字段,以旧字段(变量)结合不同月份(变量值)产生新变量。实际中,这张表旧变量*月份约产生新变量估计在3000个左右。谢谢 !

原始文件    
cust_idmonthKPI1KPI2 
a2012021213 
a2012031416 
b2012021822 
     
希望结果    
cus_idKPI1_201202KPI2_201202KPI1_201203KPI2_201203
a12131416
b1822..



二维码

扫码加我 拉你入群

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

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

关键词:数据表 新变量 变量值 month mont 数据表 如何 统计

沙发
davyin 发表于 2013-6-20 09:43:56
在线求解答。困扰我很久了。

藤椅
playmore 发表于 2013-6-20 09:55:10
你的这个问题,如果KPI只有两个的话,可以用两步proc transpose解决,然后再把两个结果表格组在一起,如下所示:

proc transpose data=have out=want1;
by cust_id;
id month;
var KPI1;
quit;

proc transpose data=have out=want2;
by cust_id;
id month;
var KPI2;
quit;

然后再把这两个want表合并,合并的时候需要修改下变量名。

如果你的KPI变量很多,我就没有什么好办法了,等其他牛人来解答吧


已有 1 人评分学术水平 热心指数 信用等级 收起 理由
davyin + 1 + 1 + 1 观点有启发

总评分: 学术水平 + 1  热心指数 + 1  信用等级 + 1   查看全部评分

playmore邀请您访问ChinaTeX论坛!!!进入ChinaTeX论坛

板凳
davyin 发表于 2013-6-20 10:07:35
谢谢playmore!这个方法对我有帮助。
实务上,"kpi"变量大概有60个左右,比较多。

报纸
hopewell 发表于 2013-6-20 10:15:31
  1. data raw;
  2.     input cust_id $ month KPI1 KPI2;
  3. datalines;
  4. a 201202 12 13
  5. a 201203 14 16
  6. b 201202 18 22
  7. ;
  8. data out(index=(cust_id));
  9.     set raw;
  10.     length vname $20;
  11.     array kpi kpi1-kpi2;
  12.     do over kpi;
  13.         vname=catx('_',vname(kpi),month);
  14.         value=kpi;
  15.         output;
  16.     end;
  17. run;
  18. proc transpose data=out out=out(drop=_name_);
  19.     by cust_id;
  20.     id vname;
  21.     var value;
  22. run;
复制代码
已有 1 人评分学术水平 热心指数 信用等级 收起 理由
davyin + 1 + 1 + 1 观点有启发

总评分: 学术水平 + 1  热心指数 + 1  信用等级 + 1   查看全部评分

观钓颇逾垂钓趣 种花何问看花谁

地板
playmore 发表于 2013-6-20 10:29:35
hopewell 发表于 2013-6-20 10:15
嗯,这个办法好
proc transpose只转置,不能重建新的变量

我过去也遇到过lz这个问题,后来改进了数据结构就避免了

如果不是非要整理成这个样子用来输出报表
那么原始的类似于panel data的结构就不错
60多个KPI,一二十个月份,估计就得有1000个变量了,最后这表就没法看也没法用了
已有 1 人评分学术水平 热心指数 信用等级 收起 理由
davyin + 1 + 1 + 1 观点有启发

总评分: 学术水平 + 1  热心指数 + 1  信用等级 + 1   查看全部评分

playmore邀请您访问ChinaTeX论坛!!!进入ChinaTeX论坛

7
boe 发表于 2013-6-20 11:14:30
playmore 发表于 2013-6-20 10:29
嗯,这个办法好
proc transpose只转置,不能重建新的变量
有道理,没必要转成那样
Gorgeous girl , I love !

8
davyin 发表于 2013-6-20 15:01:52
各位牛人的方法和观点很有启发。我后来想着实在不行,就只能从改数据结构着手了。

9
梦想世界1 发表于 2013-6-20 15:47:20
方法真好

10
bobguy 发表于 2013-6-23 05:21:03
You can call transpose twice to get your results. Here is an example.

data tmp1;
input cust_id $    month    KPI1    KPI2;
c=catt(cust_id,month);
cards; 
a    201202    12    13     
a    201203    14    16     
b    201202    18    22
;

proc transpose data=tmp1 out=tmp2 ;
by cust_id month;
var KPI1 KPI2;
run;

proc transpose data=tmp2 out=tmp3;
by cust_id ;
id _NAME_  month ;
var COL1;
run;

proc print;run;
已有 1 人评分学术水平 热心指数 信用等级 收起 理由
davyin + 1 + 1 + 1 观点有启发

总评分: 学术水平 + 1  热心指数 + 1  信用等级 + 1   查看全部评分

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

本版微信群
加好友,备注cda
拉您进交流群
GMT+8, 2025-12-30 10:44