2016-04-25 1 views
1

У меня есть 2 клиента в течение 2 месяцев с даты транзакции, теперь мне нужно извлечь только одну транзакционную дату за этот месяц для этого конкретного клиента. Мне нравится месяц. Я не получил правильного представления об этом на SAS. Может ли кто-нибудь помочь? Заранее спасибо.Поиск 1-й даты транзакции в SAS

Cust_name Vis_date V 3/1/2016 V 8/1/2016 V 16/1/2016 V 18/1/2016 V 26/1/2016 V 27/1/2016 E 5/1/2016 E 8/1/2016 E 18/1/2016 E 19/1/2016 E 25/1/2016 E 26/1/2016 V 4/2/2016 V 8/2/2016 V 17/2/2016 V 25/2/2016 V 26/2/2016 V 27/2/2016 E 5/2/2016 E 8/2/2016 E 23/2/2016 E 24/2/2016 E 25/2/2016 E 28/2/2016

ответ

0

Я бы сначала получил месяц для каждой записи, а затем отсортировал. При том, что вы можете вытащить наблюдения с шагом данных следующим образом:

data test.doc1;                               
set test.doc;                               

Month = month(__Vis_date);                            
run;                                  

proc sort data=test.doc1;                            
by Cust_name Month __Vis_date;                           
run;                                  

data test.doc2;                               
set test.doc1;                               
by Cust_name Month;                              
if first.Month then output;                            
run;   
+1

Это будет работать только на один год, если у вас есть более одного года в ваших данных, вы получите неверные результаты. –

0

Если вы создаете переменную, которая отслеживает месяца, это становится довольно легко! Vis_date нужно форматировать как переменную даты, чтобы это работало.

data your_data2; 
    set your_data; 
    month = month(vis_date); 
run; 

proc sort data = your_data2; 
by cust_name vis_date; 
run; 

proc sort nodupkey data = your_data2; 
by cust_name month; 
run; 
+0

это не вытаскивать первую запись каждого месяца для каждого клиента – DCR

+0

Сортировка cust_name vis_date сначала, а затем nodupkey it cust_name месяц - мой плохой. – superfluous

+0

Использование ваших кодов, я внесли некоторые изменения и получил ответ. Спасибо, что поддерживаете друзей. Измененный код ниже, данные your_data2; set your_data; месяц = ​​месяц (vis_date); \t check = catx ("_", Cust_name, месяц); \t run; proc print; \t run; proc sort data = Your_data2 nodupkey; от Vis_date; чеком; run; proc print data = Your_data2; run; –

0

Вы можете это сделать в одном операторе SQL:

 
proc sql ; 
    create table want as 
    select Cust_name, 
     put(Vis_date,yymmn6.) as Month, 
     min(Vis_Date) as First_Date format=date9. 
    from have 
    group by 1,2 
    order by 1,2 ; 
quit ; 
Смежные вопросы