楼主: aaabbccc
1340 7

一个数据处理的问题 [推广有奖]

  • 0关注
  • 0粉丝

已卖:80份资源

初中生

85%

还不是VIP/贵宾

-

威望
0
论坛币
164 个
通用积分
0
学术水平
0 点
热心指数
0 点
信用等级
0 点
经验
108 点
帖子
9
精华
0
在线时间
24 小时
注册时间
2007-7-10
最后登录
2014-5-5

楼主
aaabbccc 发表于 2012-4-26 17:35:34 |AI写论文

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

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

经管之家联合CDA

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

感谢您参与论坛问题回答

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

+2 论坛币
先举个简单的例子,假设一个数据,x是字符型变量
id    x
1    a,b,c
2    a,d,e,f

如何将x中用逗号隔开的数值一个个提取出来做为新变量?

希望的结果:
id  x          x1    x2    x3    x4
1  a,b,c      a      b     c     
2  a,d,e,f    a      d     e      f


现在我用的是比较笨的办法,先算出数据中x用逗号隔开的数值的最大个数(这里是4个),再用do 和array来做

data test;
        input id x:$32.;
        cards;
        1 a,b,c
        2 a,d,e,f
;

data test2;
        set test;
        array a {4} $ x1-x4;
        do i=1 to 4;
        a{i}=scan(x,i);
        end;
run;


有没有比较高级的技巧,比如,先确定x这个变量用逗号隔开的数值的最大个数(例如n),然后自动生成x1-xn新变量,将x中对应的数值填充进去,若x中用逗号隔开的数值个数小于n,则放空值。

谢谢指教。





二维码

扫码加我 拉你入群

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

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

关键词:数据处理 array Input 字符型变量 cards 数据 如何 数据分析专题 数据处理 数据分析软件 数据分析报告 面板数据分析 excel数据分析 数据分析方法 项目数据分析

沙发
spssone 发表于 2012-4-26 17:55:20
用excel的分列数据吧,直接

藤椅
maidenhan 发表于 2012-4-26 22:00:11
So, this should be what u want.

  1. data test1;
  2. format id 8. x $10.;
  3. input id x;
  4. cards;
  5. 1    a,b,c
  6. 2    a,d,e,f
  7. ;run;
  8. proc sql;
  9.       select max(length(compress(x,',','k'))) into:n
  10.           from test1;
  11. quit;
  12. %let n = %eval(&n.+1);
  13. %let x_end = %sysfunc(compress(x&n.));
  14. data test2;
  15.      set test1;
  16.      array a {&n.} $ x1-&x_end.;
  17.      do i=1 to 4;
  18.           a{i}=scan(x,i);
  19.      end;
  20. run;
复制代码

板凳
aaabbccc 发表于 2012-4-26 22:08:58
谢谢2楼啦,看来还是只能用宏实现了呀。

报纸
aloecool 发表于 2012-4-26 23:30:03
have learned. Gao Shou!

地板
aloecool 发表于 2012-4-26 23:36:33
may I ask a question: why it is "k" in sql step?

7
chendonghui1987 发表于 2012-4-26 23:57:33
二楼正解.
k的含义
sas引文解释:
keep the characters listed in the compress-listor
referenced by the modifiers instead of removing them.

8
aloecool 发表于 2012-4-27 00:14:33
Got it.  So " compress(x,',','k') " makes the result like: ",,,"  Thanks!

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

本版微信群
加好友,备注cda
拉您进交流群
GMT+8, 2026-1-3 23:15