- 阅读权限
- 255
- 威望
- 0 级
- 论坛币
- 6 个
- 通用积分
- 0
- 学术水平
- 0 点
- 热心指数
- 0 点
- 信用等级
- 0 点
- 经验
- 6289 点
- 帖子
- 21
- 精华
- 0
- 在线时间
- 50 小时
- 注册时间
- 2010-5-31
- 最后登录
- 2021-11-30
大专生
还不是VIP/贵宾
- 威望
- 0 级
- 论坛币
- 6 个
- 通用积分
- 0
- 学术水平
- 0 点
- 热心指数
- 0 点
- 信用等级
- 0 点
- 经验
- 6289 点
- 帖子
- 21
- 精华
- 0
- 在线时间
- 50 小时
- 注册时间
- 2010-5-31
- 最后登录
- 2021-11-30
| 开心 2020-1-16 13:41:42 |
---|
签到天数: 106 天 连续签到: 2 天 [LV.6]常住居民II
|
10论坛币
需要给医院药品用“移动加权平均”计算
样本数据见附件(YPJXC_CLN2),示例如下图:
已经清洗完,对操作方式是“入库”的,金额是正的;对“门诊发药”、“住院发药”,金额是负的。
并计算了每个药品的累积库存数量。
现在需要计算每个药品的“累积库存成本”,计算要求:
移动加权平均单价=(本次进货的成本+原有库存的成本)/(本次进货数量+原有存货数量)
【注释】发药不影响移动平均单价
累积库存成本(如果是进货)=(本次进货的成本+原有库存的成本)
累积库存成本(如果是发货)= 移动平均单价 * 发货后的剩余库存数量
我能力有限,先用一个药品,一条条计算,大概如下:
希望大神能帮忙写一下循环(一个是单药品的后续流水的循环;一个是不同药品的循环):
DATA YPJXC_CLN3;
SET YPJXC_CLN2 (WHERE= (CD_IDM=12)); /*先用一个药品*/
IF _N_=1 THEN DO;
FCT= ZJ;
FPC= DJ;
CALL SYMPUT ("NEW_FCT",ZJ); /*药品的第1条流水,肯定是进货,所以讲单价、金额提取到宏变量*/
CALL SYMPUT ("NEW_FPC",DJ);
END;
RUN;
DATA YPJXC_CLN4;
SET YPJXC_CLN3 ; /*药品的第2条流水,分为进货和发货两种可能,计算后,再更新宏变量*/
IF _N_=2 AND CZLX=1 THEN DO;
FCT= &NEW_FCT + ZJ;
FPC= (&NEW_FCT + ZJ )/ FN;
CALL SYMPUT ("NEW_FCT",&NEW_FCT + ZJ );
CALL SYMPUT ("NEW_FPC",(&NEW_FCT + ZJ )/ FN );
END;
ELSE IF _N_=2 AND CZLX=-1 THEN DO;
FCT= &NEW_FPC *FN ;
FPC= &NEW_FPC ;
CALL SYMPUT ("NEW_FCT",&NEW_FPC *FN );
CALL SYMPUT ("NEW_FPC",&NEW_FPC );
END;
RUN;
DATA YPJXC_CLN5;
SET YPJXC_CLN4 ; /*药品的第3条流水,重复下去*/
IF _N_=3 AND CZLX=1 THEN DO;
FCT= &NEW_FCT + ZJ;
FPC= (&NEW_FCT + ZJ )/ FN;
CALL SYMPUT ("NEW_FCT",&NEW_FCT + ZJ );
CALL SYMPUT ("NEW_FPC",(&NEW_FCT + ZJ )/ FN );
END;
ELSE IF _N_=3 AND CZLX=-1 THEN DO;
FCT= &NEW_FPC *FN ;
FPC= &NEW_FPC ;
CALL SYMPUT ("NEW_FCT",&NEW_FPC *FN );
CALL SYMPUT ("NEW_FPC",&NEW_FPC );
END;
RUN;
|
|