2015-12-15 72 views
-1

我有5列.The列是SAS,數據準備

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個月以上的持續時間,從而爲股票的每一天[例如,qty_in上2 /二千○一十五分之一是10,那麼它應該顯示的qty_in值作爲上2015年2月1日+ final_qty上1/1/2015]針對相同股票]的qty_in總和。我怎樣才能達到這與薩斯。 運行此在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    
; 
+0

如上所述,這對SO來說不是一個好問題。您需要提供樣本輸入和輸出數據以幫助澄清您的問題。要遵循的規則SO,你也應該張貼你已經嘗試什麼作爲SO不是代碼寫作服務。 – Reeza

+0

你應該閱讀日期爲日期值,而不是字符串。同時,爲了避免與什麼是一個月,什麼是你應該提出日期爲YYMMDD或DATE9格式的日期的日部分混亂。您的示例數據是否代表兩天或兩個月? – Tom

回答

0

。另外,開始只有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 testfile; 輸入日期$ 1-10庫存\t $ 11-16 qty_in $ 17-20 \t qty_out $ 21-23 \t final_qty $ 24-26 ; datalines; 1/1/2015 \t \t一個10 \t 1/1/2015 \t \t b 20 \t 1/1/2015 \t \tÇ32 \t 2015年2月1日\t一個\t \t 10/*此值應爲= qty_in(2015年2月1日+ final_qty 1/1/2015即,10 + 10 = 20 */ 2015年2月1日\t \t b 20 \t \t/*這應該是20 + 16 = 36 */ 2015年2月1日\t \tç32 \t \t ; – abhi

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;