楼主: funwin
16124 17

求助 如何算占比 [推广有奖]

  • 0关注
  • 2粉丝

硕士生

85%

还不是VIP/贵宾

-

威望
0
论坛币
177 个
通用积分
0
学术水平
0 点
热心指数
4 点
信用等级
0 点
经验
2256 点
帖子
192
精华
0
在线时间
131 小时
注册时间
2007-11-7
最后登录
2016-1-22

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

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

经管之家联合CDA

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

感谢您参与论坛问题回答

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

+2 论坛币

如何算一下数据集的占比?

基金   持有的股票         持有的金额        股票在该只基金中的占比

a           adefd                  10000

a          dfef                   3000

a           kddd                    4000

b           adfd                   20000

b           adfdad               2000

b          jkdj                     4000

b          jdkd                       900

..........

如何得出第四列的数据?比如a基金adefd股票在a基金中的占比10000/(10000+3000+4000)用sas语言如何编写?

哪位高手指点一下?不胜感激!!

二维码

扫码加我 拉你入群

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

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

关键词:高手指点 不胜感激 EFD def ADF 不胜感激 如何

回帖推荐

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

data mysas.jijin;input jijin$ gupiao$ qian;cards;a adefd 10000a dfef 3000a kddd 4000b adfd 20000b adfdad 2000b jkdj 4000b jdkd 900;run; data mysas.jijin2;set mysas.jijin;by jijin;if first.jijin then total=0;total+qian;run;data mysas.jijin3;set mysas.jijin2;by jijin;if last.jijin;run; data mysas.b;merge mysas.jijin mysas.jijin3;by jijin;rate=qian/total;run;代码弄好了~你要用的话先要建立一个mysas,或 ...

本帖被以下文库推荐

沙发
happytalent 发表于 2008-6-12 13:21:00 |只看作者 |坛友微信交流群
先用Transpose过程转置 然都在求就可以了

使用道具

藤椅
happytalent 发表于 2008-6-12 13:27:00 |只看作者 |坛友微信交流群

变为这种形式

            a

 adefd      dfef      kddd                             

  3000     4000       10000

     .

     .

     .

使用道具

板凳
k0751 发表于 2008-6-12 17:00:00 |只看作者 |坛友微信交流群
data mysas.jijin;
input jijin$ gupiao$ qian;
cards;
a adefd 10000
a dfef 3000
a kddd 4000
b adfd 20000
b adfdad 2000
b jkdj 4000
b jdkd 900
;
run;
data mysas.jijin2;
set mysas.jijin;
by jijin;
if first.jijin then total=0;
total+qian;
run;
data mysas.jijin3;
set mysas.jijin2;
by jijin;
if last.jijin;
run;
data mysas.b;
merge mysas.jijin mysas.jijin3;
by jijin;
rate=qian/total;
run;
代码弄好了~你要用的话先要建立一个mysas,或者把代码中的MYSAS去掉~
第一次研究这个问题,所以做的有点复杂~见谅~应该有更加简单的方法的~
已有 1 人评分论坛币 收起 理由
bakoll + 5 精彩帖子

总评分: 论坛币 + 5   查看全部评分

使用道具

报纸
sakunamary 发表于 2008-6-12 19:54:00 |只看作者 |坛友微信交流群

4楼正解,简单的方法这个就行了

已有 1 人评分论坛币 收起 理由
bakoll + 5 精彩帖子

总评分: 论坛币 + 5   查看全部评分

我sas故我在

使用道具

地板
funwin 发表于 2008-6-12 20:47:00 |只看作者 |坛友微信交流群

谢谢楼上几位高手!

也有朋友推荐用sql,如下,

proc sql;

  select fundname, stockname, amount,

      (amount/sum(amount)) as percent  format=percent8.2

  from fund.stockholdings

  group by fundname;

也能算出占比。

各位高手觉得如何?大家探讨一下!

使用道具

7
funwin 发表于 2008-6-12 21:07:00 |只看作者 |坛友微信交流群

我试了一下可以得出:

   The SAS System          19:56 Saturday, June 12, 2008 1341

                               fundname  stockname    amount   percent
                               ---------------------------------------
                               a         adefd         10000   58.82%
                               a         kddd           4000   23.53%
                               a         dfef           3000   17.65%
                               b         jkdj           4000   14.87%
                               b         jdkd            900    3.35%
                               b         adfdad         2000    7.43%
                               b         adfd          20000   74.35%

唯一的缺点就是只给出了结果,而不能形成新的数据集。

使用道具

8
funwin 发表于 2008-6-12 21:29:00 |只看作者 |坛友微信交流群
以下是引用k0751在2008-6-12 17:00:00的发言:
data mysas.jijin;
input jijin$ gupiao$ qian;
cards;
a adefd 10000
a dfef 3000
a kddd 4000
b adfd 20000
b adfdad 2000
b jkdj 4000
b jdkd 900
;
run;
data mysas.jijin2;
set mysas.jijin;
by jijin;
if first.jijin then total=0;
total+qian;
run;
data mysas.jijin3;
set mysas.jijin2;
by jijin;
if last.jijin;
run;
data mysas.b;
merge mysas.jijin mysas.jijin3;
by jijin;
rate=qian/total;
run;
代码弄好了~你要用的话先要建立一个mysas,或者把代码中的MYSAS去掉~
第一次研究这个问题,所以做的有点复杂~见谅~应该有更加简单的方法的~

最后一步有问题:

data mysas.b;
merge mysas.jijin mysas.jijin3;
by jijin;
rate=qian/total;
run;

得出的结论会在每一支基金中以最后一只股票代替第一支股票,得出错误的结果

使用道具

9
funwin 发表于 2008-6-12 21:35:00 |只看作者 |坛友微信交流群
以下是引用k0751在2008-6-12 17:00:00的发言:
data mysas.jijin;
input jijin$ gupiao$ qian;
cards;
a adefd 10000
a dfef 3000
a kddd 4000
b adfd 20000
b adfdad 2000
b jkdj 4000
b jdkd 900
;
run;
data mysas.jijin2;
set mysas.jijin;
by jijin;
if first.jijin then total=0;
total+qian;
run;
data mysas.jijin3;
set mysas.jijin2;
by jijin;
if last.jijin;
run;
data mysas.b;
merge mysas.jijin mysas.jijin3;
by jijin;
rate=qian/total;
run;
代码弄好了~你要用的话先要建立一个mysas,或者把代码中的MYSAS去掉~
第一次研究这个问题,所以做的有点复杂~见谅~应该有更加简单的方法的~

在第三步中稍作修改

data mysas.jijin3  (keep=jijin total);
set mysas.jijin2;
by jijin;
if last.jijin;
run;

可以得出正确结论。非常感谢4楼的这个方法,能够得出我真正想要得结果!

使用道具

10
happytalent 发表于 2008-6-12 21:54:00 |只看作者 |坛友微信交流群

在原来的程序前面加上此句

  proc sql;

 create table fund1.stockholings as

  select fundname, stockname, amount,

      (amount/sum(amount)) as percent  format=percent8.2

  from fund.stockholdings

  group by fundname;

就变成数据集了 数据集就是fund1.stockholdings

使用道具

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

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

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

GMT+8, 2024-4-25 07:21