楼主: Chemist_MZ
1770 6

[原创博文] 一个数据处理的问题 [推广有奖]

贵宾

已卖:619份资源

学术权威

1%

还不是VIP/贵宾

-

TA的文库  其他...

金融工程文库

威望
1
论坛币
10198 个
通用积分
74.4217
学术水平
466 点
热心指数
454 点
信用等级
391 点
经验
68380 点
帖子
1915
精华
0
在线时间
7646 小时
注册时间
2009-10-18
最后登录
2025-4-25

楼主
Chemist_MZ 在职认证  发表于 2010-10-15 16:28:05 |AI写论文

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

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

经管之家联合CDA

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

感谢您参与论坛问题回答

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

+2 论坛币
我现在有一列数据:
1   31414
1   41341
1   52524
1   25245
1   25243
2   25245
2   25245
2   36635
2   80700
2   74674
3   47467
3   77474
3   25243
3   25452
3   56356
。。。。。。。
我现在想让他变成:
1   31414  2   25245  3   47467
1   41341  2   25245  3   77474
1   52524  2   36635  3   25243
1   25245  2   80700  3   25452
1   25243  2   74674  3   56356

。。。。。。
请问众高手怎么做?
二维码

扫码加我 拉你入群

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

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

关键词:数据处理 怎么做 数据分析专题 数据处理 数据分析软件 数据分析报告 面板数据分析 excel数据分析 数据分析方法 项目数据分析

回帖推荐

pobel 发表于4楼  查看完整内容

data test; input x y; cards; 1 31414 1 41341 1 52524 1 25245 1 25243 2 25245 2 25245 2 36635 2 80700 2 74674 3 47467 3 77474 3 25243 3 25452 3 56356 ; data wanted; merge test( rename=(x=x1 y=y1) where=(x1=1)) test( rename=(x=x2 y=y2) where=(x2=2)) test( rename=(x=x3 y=y3) where=(x3=3)); run;

本帖被以下文库推荐

沙发
naxiehuaerll 发表于 2010-10-15 16:38:58
太简单了,直接剪切过去

藤椅
Chemist_MZ 在职认证  发表于 2010-10-15 16:42:18
2# naxiehuaerll 大哥好几百呢。。。
扫头像关注公众号“二点三西格玛”衍生品定价与风险管理

板凳
pobel 在职认证  发表于 2010-10-15 16:46:30
data test;
   input x y;
   cards;
1   31414
1   41341
1   52524
1   25245
1   25243
2   25245
2   25245
2   36635
2   80700
2   74674
3   47467
3   77474
3   25243
3   25452
3   56356
;

data wanted;
    merge test( rename=(x=x1 y=y1) where=(x1=1))
          test( rename=(x=x2 y=y2) where=(x2=2))
          test( rename=(x=x3 y=y3) where=(x3=3));
             
run;
已有 2 人评分经验 学术水平 热心指数 信用等级 收起 理由
crackman + 20 + 2 我很赞同
soporaeternus + 1 + 1 + 1 x数量不定的时候,就有点复杂,sql也有点复杂,真快

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

和谐拯救危机

报纸
Chemist_MZ 在职认证  发表于 2010-10-15 17:19:52
4# pobel 谢谢啦。。。
扫头像关注公众号“二点三西格玛”衍生品定价与风险管理

地板
hopewell 发表于 2010-10-15 19:01:10
Caution: 仅在9.2下有效
  1. data raw;
  2.     input x y;
  3. datalines;
  4. 1   31414
  5. 1   41341
  6. 1   52524
  7. 1   25245
  8. 1   25243
  9. 2   25245
  10. 2   25245
  11. 2   36635
  12. 2   80700
  13. 2   74674
  14. 2   99999
  15. 3   47467
  16. 3   77474
  17. 3   25243
  18. 3   25452
  19. 3   56356
  20. ;
  21. proc fcmp outlib=work.func.benxu;
  22.     subroutine test(inds $,outds $,obs_n,row_n,col_n);
  23.         array in_arr[1,1] /nosymbols;
  24.         array col_[1,1] /nosymbols;
  25.         call dynamic_array(in_arr,obs_n,2);
  26.         call dynamic_array(col_,row_n,col_n);
  27.         rc=read_array(inds,in_arr);
  28.         do i=1 to obs_n;
  29.             if in_arr[i,1] ne first then j=0;
  30.             j+1;
  31.             col_[j,in_arr[i,1]]=in_arr[i,2];
  32.             first=in_arr[i,1];
  33.         end;
  34.         rc=write_array(outds,col_);
  35.     endsub;
  36. run;
  37. options cmplib=work.func;
  38. data _null_;
  39.     retain row;
  40.     do _n_=1 by 1 until(last.x);
  41.         set raw end=last nobs=nobs;
  42.         by x;
  43.     end;
  44.     col+1;
  45.     row=max(row,_n_);
  46.     if last then call test('work.raw','out',nobs,row,col);
  47.     /* call test('work.raw','work.out',16,6,3) */
  48. run;
复制代码
观钓颇逾垂钓趣 种花何问看花谁

7
hongxx 发表于 2010-10-15 20:47:07
1   31414  2   25245  3   47467
1   41341  2   25245  3   77474
1   52524  2   36635  3   25243
1   25245  2   80700  3   25452
1   25243  2   74674  3   56356

你的1、3、5列其实没必要出现。就对2,4,6列取变量命x1,x2,x3就行了。
经常的股票收益率序列是你的那种状况,按股票和时间排序,需转换为列来算相关系数。
  1. data stk_return;
  2.    do stock=600000 to 600004;
  3.       stockcode=input(left(stock),$6.);
  4.       do date='01jan2010'd to '10jan2010'd;
  5.           return=rannor(12312);
  6.           output;
  7.           end;
  8.         end;
  9.         drop stock;
  10.         format date yymmdd10.;
  11. run;
  12. proc sort data=stk_return;
  13.    by date stockcode;
  14. run;
  15. proc transpose data=stk_return out=skt_by_date;
  16.     ID stockcode;
  17.         by date;
  18. run;
复制代码
你的数据只需多加一个额外变量,就可以用transpose了。
  1. data test;
  2.    input x y;
  3.    cards;
  4. 1   31414
  5. 1   41341
  6. 1   52524
  7. 1   25245
  8. 1   25243
  9. 2   25245
  10. 2   25245
  11. 2   36635
  12. 2   80700
  13. 2   74674
  14. 3   47467
  15. 3   77474
  16. 3   25243
  17. 3   25452
  18. 3   56356
  19. ;
  20. data test_add;
  21.    set test;
  22.    if first.x then x_nob=1;
  23.    else x_nob++1;
  24.    by x;
  25. run;
  26. proc sort data=test_add;
  27.    by x_nob;
  28. run;
  29. proc transpose data=test_add out=wanted(drop=_name_);
  30.    ID  x;
  31.    by x_nob;
  32. run;
复制代码

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

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