楼主: 楊中
2031 7

[问答] 计算商品损益 [推广有奖]

  • 0关注
  • 0粉丝

大专生

40%

还不是VIP/贵宾

-

威望
0
论坛币
10 个
通用积分
0
学术水平
0 点
热心指数
1 点
信用等级
0 点
经验
564 点
帖子
40
精华
0
在线时间
30 小时
注册时间
2012-10-1
最后登录
2022-5-2

楼主
楊中 发表于 2013-3-30 02:49:13 |AI写论文

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

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

经管之家联合CDA

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

感谢您参与论坛问题回答

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

+2 论坛币

小弟的问题是,
想要算出不同公司(anco=12)的商品(key)损益。


首先
(1)

BS=BOS=0 是买进
然后 BS=S OS=1 是卖出。

(2)
或者是 BS=S OS=0 是买进,
然后 BS=B OS=1 是卖出。


PRICE是价格 QTY是数量。

公司1只有商品A
公司2有商品AB

在上面叙述的情况下(有两种),小弟想要算出

公司1A商品(key)损益,
公司2A商品和B商品的损益。

最后把结果output print出来。
结果呈现的方式希望如下:
ACNO  key  profit

1      a      ?

2      a      ?

2    b     ?

PS:小弟想法二,感谢yongyitian大大热心协助。
       剩下想法一,或许比较复杂,如果有大大愿意帮忙,小弟也很感谢。


附上EXCEL档案,里面是数据(sheet1)要汇入到SAS里面。

abc1.xls (26.5 KB)


二维码

扫码加我 拉你入群

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

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

关键词:Profit output print sheet Price 计算 商品

沙发
楊中 发表于 2013-3-30 02:57:27
PS:小弟只是举例,实际资料笔数蛮大的,所以需要透过SAS处理。

或者是,有没有大大能够透过SAS,将EXCEL的sheet1数据,变成sheet2那样。
小弟想法是,假使商品买进数量(qty)是5,
我就把数据变成5笔一一列出对照,
同理,假使商品卖出数量(qty)是4,
我也把数据变成4笔一一列出对照,
最后,就变成sheet2那样。
OS=0分成一边(买),OS=1分成另外一边(卖)。

藤椅
yongyitian 发表于 2013-3-30 08:00:11
是不是这样
proc sort data=abc;
   by acno;
run;
data abc1;
   set abc;
   by acno;
   os = os*1;
   if qty > 1 then do;
           do i = 1 to qty;
                  output;
               end;
        end;
        else output;
  drop i;
run;

data buy sale;
     set abc1;
         if os = 0 then output buy;
         if os = 1 then output sale;
run;
data buy_sale;
      merge buy sale (rename = (date = date1
                                acno = acno1
                                 key = key1
                                  bs = bs1
                                  os =  os1
                               price = price1
                                 qty = qty1)) ;
run;
已有 1 人评分学术水平 热心指数 信用等级 收起 理由
楊中 + 1 + 1 + 1 观点有启发

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

板凳
楊中 发表于 2013-3-30 10:46:24
yongyitian 发表于 2013-3-30 08:00
是不是这样
proc sort data=abc;
   by acno;
Y大,你的意思我看得懂,应该是根据我的第二种想法吧~
先谢谢你~小弟下午会try try 看。
然后 最后merge这行,小弟习惯以下这样写说,
跟Y大的差别是??  

merge buy sale;
rename date = date1
            acno = acno1
            key = key1
            bs = bs1
            os =  os1
            price = price1
            qty = qty1 ;

报纸
yongyitian 发表于 2013-3-30 11:21:57
楊中 发表于 2013-3-30 10:46
Y大,你的意思我看得懂,应该是根据我的第二种想法吧~
先谢谢你~小弟下午会try try 看。
然后 最后merg ...
阔号(。) 要紧跟在两个数据集中一个的后面。sale(。。。)的意思是要改变sale dataset 的变量名。

你的code

第一行的 ;说明这句已经结速。下面的rename是对merge以后的数据集进行的。

在rename前的merge时,因为两个数据集的变量名相同,所以第二个数据集会覆盖第一个数据集。

地板
楊中 发表于 2013-3-30 11:44:28
yongyitian 发表于 2013-3-30 11:21
阔号(。) 要紧跟在两个数据集中一个的后面。sale(。。。)的意思是要改变sale dataset 的变量名。

...
谢谢Y大您~小弟刚试了一下,的确是我想要的结果,
从中我也学到了一些小技巧。
日后,如果小弟修改程序语法时,
有遇到问题,还希望Y大您不吝啬指教~^0^

7
yongyitian 发表于 2013-3-30 11:53:46
楊中 发表于 2013-3-30 11:44
谢谢Y大您~小弟刚试了一下,的确是我想要的结果,
从中我也学到了一些小技巧。
日后,如果小弟修改程序 ...
简单问题还可以。

8
yongyitian 发表于 2013-3-30 12:55:13
不太懂损益,是不是要算sum

data abc_1;
    set abc;
        if os = 0 then balance = -price*qty;
        if os = 1 then balance = price*qty;
run;

proc sort data=abc_1;
   by acno key;
run;

proc sql;
    create table abc_2 as
    select acno, key, sum(balance) as Total
        from abc_1
        group by acno, key;
quit;

proc print data=abc_2; title 'abc_2'; run;

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

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