SAS,数据准备
我有5列。这些列是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
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;