SAS,数据准备

SAS,数据准备,sas,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\u为10,则应将qty\u的值显示为同一股票的qty\u的总和,即2015年2月1

我有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\u
为10,则应将
qty\u
的值显示为同一股票的
qty\u
的总和,即2015年2月1日的
qty\u
。如何使用sas实现这一点。 在sas中运行此命令

data testfile;
 input date $ 1-10 stock $ 11-16 qty_in $17-20 qty_out $21-23 final_qty $24-26; 
datalines; 
1/1/2015    a   10  0   10
1/1/2015    b   20  4   16
1/1/2015    c   32  23  9
2/1/2015    a   10         /*this value should be= qty_in(2/1/2015 + final_qty 1/1/2015 i.e. 10+10=20*/ 
2/1/2015    b   20          /*this should be 20+16=36*/           
2/1/2015    c   32             
; 

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

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;

让我知道这是否适合你。如果您提供一些测试数据,其中包括您开始的内容和您希望最终得到的内容,这将有所帮助。你的问题很好,但不是很清楚,除非你之前(imo)处理过财务数据。

从头到尾,这应该符合你的要求。这很直截了当,如果你不明白什么,请告诉我。请注意,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;

如前所述,这对SO来说不是一个好问题。您需要提供示例输入和输出数据,以帮助澄清您的问题。要遵循SO规则,您还应该发布您尝试过的内容,因为SO不是代码编写服务。您应该将日期作为日期值而不是字符串读取。此外,为了避免混淆日期的月份和日期部分,您应该以YYMMDD或DATE9格式显示日期。您的示例数据是表示两天还是两个月;输入日期$1-10库存$11-16数量输入$17-20数量输出$21-23最终数量$24-26;数据线;2015年1月1日a 10 0 10 1/1/2015 b 20 4 16 1/1/2015 c 32 23 9 2/1/2015 a 10/*该值应=数量(2015年2月1日+最终数量1/1/2015,即10+10=20*/2/1/2015 b 20/*这应为20+16=36*/2/1/2015 c 32;