SAS,数据准备

时间:2015-12-15 11:42:49

标签: sas

我有5列。列是

date
stock[a,b,c,d,.]
qty_in[fixed number as in 10 qty came in for the stock on 1/1/2015]
qty_out[ went out /or got sold]
final_qty(qty_in -qty_out)

超过100个股票和交易持续时间超过6个月,因此对于每天的股票[例如,2015年2月1日的qty_in为10,那么它应该显示{{1}的值对于相同的股票,2015年1月1日的qty_in + 2015年1月1日qty_in的总和]。我怎样才能与sas实现这一目标。  在sas中运行

final_qty

2 个答案:

答案 0 :(得分:0)

如果要在数据步骤中执行此操作,首先需要按库存和按日期对数据集进行排序。此外,从仅4列开始,将计算数据集中的最终col:

data stockout5;
set stockin4;
retain FIN_QTY;
by stock date;
if (first.stock) then FIN_QTY = INQTY - OUTQTY;
else FIN_QTY = FIN_QTY + INQTY - OUTQTY;
run;

让我知道这是否适合您。如果您提供一些测试数据与您开始使用的内容以及您希望最终得到的内容将会有所帮助。你的问题很好,但除非你之前曾经使用过财务数据,否则不是很清楚

答案 1 :(得分:0)

从开始到结束,这应该做你想要的。如果你不明白的话,请直接告诉我。请注意,添加0表示缺少值。

Data stock4;
format date date9.;

date = '1jan2015'd;
stock = "a";
in = 10;
out = 0 ;
output; 
date = "1jan2015"d;
stock = "b";
in = 20;
out = 4;
output; 
date = "1jan2015"d;
stock ="c";
in =32;
out=23;
output; 
date="2jan2015"d;
stock = "a"; 
in = 10; 
out=0;
output ;
date="2jan2015"d; 
stock ="b"; 
in = 20;
out=0;
output; 
date ="2jan2015"d;
stock = "c"; 
in=32;
out=0;
output;
run;

proc sort data=stock4;
by stock date;
run;


data stock5;
set stock4;
retain FIN_QTY;
by stock date;
if (first.stock) then FIN_QTY = IN - OUT;
else FIN_QTY = FIN_QTY + IN - OUT;
run;