2015-12-15 3 views
-1

У меня 5 столбцов .The столбцыСАС, ПОДГОТОВКА ДАННЫХ

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/1/2015 - 10, тогда он должен отображать значение qty_in в качестве суммы qty_in на 1/1/2015 + final_qty на 01.01.2005] за тот же товар]. Как я могу достичь этого с помощью 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 stock \t $ 11-16 qty_in $ 17-20 \t qty_out $ 21-23 \t final_qty $ 24-26 ; datalines; 1/1/2015 \t 1/1/2015 \t \t б 20 1/1/2015 \t с 32 \t 2/1/2015 \t \t \t 10/* это значение должно быть = qty_in (2/1/2015 + final_qty 1/1/2015 т.е. 10 + 10 = 20 */ 2/1/2015 \t б \t/* это должно быть 20 + 16 = 36 */ 2/1/2015 \t c \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; 
Смежные вопросы