全部版块 我的主页
论坛 数据科学与人工智能 数据分析与数据科学 SAS专版
4470 11
2014-05-16

原来题目要求及解決方法https://bbs.pinggu.org/thread-3030664-1-1.html


现在问题在于老师要求汇总后要再次分类,最新要求在下面,谢谢。


前题回顾:

有多个证券﹑10个年份,4个关联交易类型 3个交易方向,要求每年各类关联交易金额按关联交易类型,同时按还按交易方向进行细分类

即证券类型----年份----关联交易类型----交易方向分类,最后把企业关联交易金额汇总。

证券01在2003年 有3笔是关联交易类型为1,交易方向为1的金额给汇总在该列的关联交易金额。

证券          年份      关联交易类型   交易方向       关联交易金额

01             2003              1               1                        10

01             2003              1               1                        20

01             2003              1               1                        30

汇总得到

01             2003              1               1                        60


原本希望得到的内容如:  

证券          年份      关联交易类型   交易方向       关联交易金额

01             2003              1               1                         SUM

01             2003              2               1                         SUM

01             2003              3               1                         SUM

01             2003              1               2                         SUM

01             2003              2               2                         SUM

01             2003              3               2                         SUM

01             2003              1               3                         SUM

01             2003              2               3                         SUM

01             2003              3               3                         SUM

01             2004              1               1                         SUM

01              2004              2               1                        SUM

  …               …              …              …

02             2003              1               1                         SUM

02             2003              2               1                         SUM

02             2003              3               1                         SUM

02             2003              1               2                         SUM

02             2003              2               2                         SUM

02             2003              3               2                         SUM

02             2003              1               3                         SUM

02             2003              2               3                         SUM

02             2003              3               3                         SUM

02             2004              1               1                         SUM

02             2004              2               1                          SUM



  …               …              …              …

现在希望得到的结果:

如关联交易类型为1﹑交易方向为1 关联交易金额sum的值放进r11

    关联交易类型为1﹑交易方向为2  关联交易金额sum的值放进r12

    关联交易类型为1﹑交易方向为3  关联交易金额sum的值放进r13

    关联交易类型为2﹑交易方向为1  关联交易金额sum的值放进r21

    关联交易类型为2﹑交易方向为2  关联交易金额sum的值放进r22…

  如此类推,一共有四个关联交易类型和三个交易方向12r


以证券01 年份2003年为例  大概意思是

证券   年份    关联交易类型 交易方向 关联交易金额       r11         r12         r13        r21           r22         r23        r31        r32          r33

01     2003         1                      1        SUMa        SUMa

01     2003         2                      1        SUMb                                                SUMb

01     2003         3                      1        SUMc                                                                                         SUMc                        

01     2003         1                      2        SUMd                    SUMd

01     2003         2                      2        SUMe                                                               SUMe

01     2003         3                      2        SUMf                                                                                                       SUMf

01     2003         1                      3        SUMg                                  SUMg

01     2003         2                      3        SUMh                                                                            SUMh

01     2003         3                      3        SUMi                                                                                                                      SUMi


最后应该表现出来的形式:

证券   年份        r11          r12           r13          r21           r22             r23                r31              r32               r33

01     2003   SUMa    SUMd    SUMg    SUMb     SUMe    SUMh      SUMc      SUMf       SUMi

01     2004      ...

01     2005

02     2003   SUMa    SUMd    SUMg    SUMb     SUMe    SUMh      SUMc      SUMf       SUMi

02     2004

02     2005

...


现在想的是从未汇总前可以直接弄成这个形式﹑还是在汇总以后进一步变成这个形式。

急求大神相助啊囧~~这里没有汇总成这个形式,stata部分无法进行。


谢谢各位了。> <




二维码

扫码加我 拉你入群

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

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

全部回复
2014-5-16 22:33:46
假设得到的下列数据集为a,变量名分别为code,year,type,dir,sum:
证券          年份      关联交易类型   交易方向       关联交易金额

01             2003              1               1                         SUM

01             2003              2               1                         SUM

01             2003              3               1                         SUM

01             2003              1               2                         SUM

01             2003              2               2                         SUM

01             2003              3               2                         SUM

01             2003              1               3                         SUM

01             2003              2               3                         SUM

01             2003              3               3                         SUM

01             2004              1               1                         SUM

01              2004              2               1                        SUM

  …               …              …              …

02             2003              1               1                         SUM

02             2003              2               1                         SUM

02             2003              3               1                         SUM

02             2003              1               2                         SUM

02             2003              2               2                         SUM

02             2003              3               2                         SUM

02             2003              1               3                         SUM

02             2003              2               3                         SUM

02             2003              3               3                         SUM

02             2004              1               1                         SUM

02             2004              2               1                          SUM





  …               …              …              …
则可以利用如下编程得到最终结果:
复制代码
二维码

扫码加我 拉你入群

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

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

2014-5-17 02:30:28
mingfeng07 发表于 2014-5-16 22:33
假设得到的下列数据集为a,变量名分别为code,year,type,dir,sum:
证券          年份      关联交易类型   ...
啊,是我的错,我表述不够清晰。
我用了以下运行代码运行了
proc sort data=a ;by code year type dir;run;                                                                  
proc transpose data=a  out=b(rename=(col1=r11 col2=r12 col3=r13 col4=r21 col5=r22 col6=r23 col7=r31  col8=r32 col9=r33 col10=r51 col11=r52 col12=r53) drop=_name_);                                                                        
by code year;                                                                                                                          
var sum;                                                                                                                           
run;   
其实原表中的数值不是像上表例子中那么漂亮
实际上是汇总以后变成了
证券    年份      关联交易类型   交易方向   关联交易金额   01     2003         5                1         SUMa   
01     2004         5                1         SUMb                  
01     2005         3                2         SUMc
01     2005         5                1         SUMd                  
01     2005         5                2         SUM e
01     2006         5                 1         SUMf
也就是说关联交易类型不是依照12345排列,中间有缺失的类型。
从关联交易类型看 只有1﹑2﹑3﹑5而没有4这个分类。
所以01  2003年关联交易类型为5 交易方向为1 希望得到的是 sum在r51
而这个代码是要按次序的 变成了
单个看:
像01  2003年 关联交易类型为5交易方向为1 时 sum放进在r11
同一年看:
像01  2005年 关联交易类型为3交易方向为2 时 sum放进在r11
像01  2005年 关联交易类型为5交易方向为1 时 sum放进在r12
像01  2005年 关联交易类型为5交易方向为2 时 sum放进在r13
后面的分类基本没用上。
本来希望得到的是:
像01  2003年 关联交易类型为3交易方向为2 时 sum放进在r32
像01  2003年 关联交易类型为5交易方向为1 时 sum放进在r51
像01  2003年 关联交易类型为5交易方向为2 时 sum放进在r52

还有一个问题是
在col9之前都正常,
但在col10=r51 col11=r52 col12=r53) drop=_name_);
日志就弹出这个内容:
WARNING: The variable col10 in the DROP, KEEP, or RENAME list has never been referenced.
WARNING: The variable col11 in the DROP, KEEP, or RENAME list has never been referenced.
WARNING: The variable col12 in the DROP, KEEP, or RENAME list has never been referenced.
NOTE: There were 39915 observations read from the data set MYLIB.REPORT1235_NEW.
NOTE: The data set MYLIB.REPORT1235_TRY has 13712 observations and 11 variables.
NOTE: PROCEDURE TRANSPOSE used (Total process time):
      real time           0.38 seconds
      cpu time            0.18 seconds
谢谢您的帮忙了,能帮帮忙再处理一下吗?万分感激啊><!

二维码

扫码加我 拉你入群

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

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

2014-5-17 12:45:33
自己推高高~~~有沒有大神会这么做啊
二维码

扫码加我 拉你入群

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

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

2014-5-17 20:34:31
小芝麻子 发表于 2014-5-17 02:30
啊,是我的错,我表述不够清晰。
我用了以下运行代码运行了
proc sort data=a ;by code year type dir; ...
复制代码
二维码

扫码加我 拉你入群

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

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

2014-5-17 22:36:54
mingfeng07 发表于 2014-5-17 20:34
复制代码


从这里开始就这样了T.T   
35   data mylib.test(drop=i j k1 k2 k3 col1-col25);
36   set mylib.try1 ;
37   by stkcd year;
38   array arra{*} col1-col25;
39   array a{*} r11-r15 r21-r25 r31-r35 r41-r45 r51-r55;
40   do i=1 to dim(arra);
41   k1=input(substr(arra(i),1,1),8.);
42   k2=input(substr(arra(i),2,1),8.);
43   k3=input(substr(arra(i),4),8.);
44   do j=1 to dim(a);
45   if 5*(k1-1)+k2=j then a(5*(k1-1)+k2)=k3;
46   end;
47   end;
48   run;

NOTE: 函數 INPUT 的引數無效 (位於 line 43 column 4)。
Stkcd=000001 year=2003 COL1=051_1008488050 COL2=  COL3=  COL4=  COL5=  COL6=  COL7=  COL8=  COL9=  FIRST.Stkcd=1 LAST.Stkcd=0
FIRST.year=1 LAST.year=1 col10=  col11=  col12=  col13=  col14=  col15=  col16=  col17=  col18=  col19=  col20=  col21=  col22=
col23=  col24=  col25=  r11=. r12=. r13=. r14=. r15=. r21=. r22=. r23=. r24=. r25=. r31=. r32=. r33=. r34=. r35=. r41=. r42=.
r43=. r44=. r45=. r51=. r52=. r53=. r54=. r55=. i=26 k1=. k2=. k3=. j=26 _ERROR_=1 _N_=1
NOTE: 函數 INPUT 的引數無效 (位於 line 43 column 4)。
Stkcd=000001 year=2004 COL1=051_140000000 COL2=  COL3=  COL4=  COL5=  COL6=  COL7=  COL8=  COL9=  FIRST.Stkcd=0 LAST.Stkcd=0
FIRST.year=1 LAST.year=1 col10=  col11=  col12=  col13=  col14=  col15=  col16=  col17=  col18=  col19=  col20=  col21=  col22=
col23=  col24=  col25=  r11=. r12=. r13=. r14=. r15=. r21=. r22=. r23=. r24=. r25=. r31=. r32=. r33=. r34=. r35=. r41=. r42=.
r43=. r44=. r45=. r51=. r52=. r53=. r54=. r55=. i=26 k1=. k2=. k3=. j=26 _ERROR_=1 _N_=2
NOTE: 函數 INPUT 的引數無效 (位於 line 43 column 4)。
NOTE: 函數 INPUT 的引數無效 (位於 line 43 column 4)。
NOTE: 函數 INPUT 的引數無效 (位於 line 43 column 4)。

NOTE: 对遗漏值执行作业,因此导致产生了遗漏值。

      每个位置的指定方式: ():() (次数)

      7572175 (位于 45:5)    7572175 (位于 45:9)    7572175 (位于 45:12)

NOTE: 无法在下列位置执行数学运算。运算结果已设定为遗漏值。

      每个位置的指定方式: ():() (次数)

      2 (位于 41:4)       2 (位于 42:4)       39915(位于 43:4)

NOTE: There were 13712 observations read from the dataset MYLIB.TRY1.

NOTE: The data set MYLIB.TEST has 13712 observations and27 variables.

NOTE: DATA statement used (Total process time):

      real time           4.96 seconds

      cpu time            4.78 seconds


那个,大神啊~~我那个是有4个关联交易类型:010203053个交易方向:123所以有12个列

就是没有关联交易类型04

实在是太太麻烦您了!!!!!





二维码

扫码加我 拉你入群

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

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

点击查看更多内容…
相关推荐
栏目导航
热门文章
推荐文章

说点什么

分享

扫码加好友,拉您进群
各岗位、行业、专业交流群