在SAS中查找第一个事务日期

在SAS中查找第一个事务日期,sas,ssas,Sas,Ssas,我有2个客户2个月的交易日期,现在我只需要提取该特定客户当月的第一个交易日期。像那样我需要一个月的时间。我在SAS上没有得到正确的想法。有人能帮忙吗?提前谢谢 客户名称与日期 V 2016年3月1日 V 2016年8月1日 V 2016年1月16日 V 2016年1月18日 V 2016年1月26日 V 2016年1月27日 E 2016年5月1日 E 2016年8月1日 E 2016年1月18日 E 2016年1月19日 E 2016年1月25日 E 2016年1月26日 V 4/2/2016

我有2个客户2个月的交易日期,现在我只需要提取该特定客户当月的第一个交易日期。像那样我需要一个月的时间。我在SAS上没有得到正确的想法。有人能帮忙吗?提前谢谢

客户名称与日期
V 2016年3月1日
V 2016年8月1日
V 2016年1月16日
V 2016年1月18日
V 2016年1月26日
V 2016年1月27日
E 2016年5月1日
E 2016年8月1日
E 2016年1月18日
E 2016年1月19日
E 2016年1月25日
E 2016年1月26日
V 4/2/2016
V 2016年8月2日
V 2016年2月17日
V 2016年2月25日
V 2016年2月26日
V 2016年2月27日
E 2016年5月2日
E 2016年8月2日
E 2016年2月23日
E 2016年2月24日
E 2016年2月25日
E 2016年2月28日

如果您创建一个跟踪月份的变量,这将变得非常简单!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;

如果您创建一个跟踪月份的变量,这将变得非常简单!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;

我会先得到每个记录的月份,然后进行排序。这样,您就可以通过如下数据步骤提取观测值:

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;        

我会先得到每个记录的月份,然后进行排序。这样,您就可以通过如下数据步骤提取观测值:

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;        

您可以在一条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 ; proc-sql; 创建所需的表作为 选择客户名称, 将(相对日期,yymmn6)作为月份, min(Vis_Date)作为第一个日期格式=date9。 从有 按1,2分组 以1,2的顺序; 退出
您可以在一条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 ; proc-sql; 创建所需的表作为 选择客户名称, 将(相对日期,yymmn6)作为月份, min(Vis_Date)作为第一个日期格式=date9。 从有 按1,2分组 以1,2的顺序; 退出
这并不是为每个客户提取每个月的第一条记录,先按客户名称和日期排序,然后按客户名称月份键入-我的错。使用您的代码,我做了一些更改并得到了答案。谢谢你的支持,朋友们。更改后的代码如下,数据为您的_数据2;设置您的_数据;月=月(相对于日期);检查=catx(“客户名称,月份”);跑过程打印;跑proc sort data=您的_data2 nodupkey;截止日期;通过支票;跑proc print data=您的_数据2;跑这并不是为每个客户提取每个月的第一条记录,先按客户名称和日期排序,然后按客户名称月份键入-我的错。使用您的代码,我做了一些更改并得到了答案。谢谢你的支持,朋友们。更改后的代码如下,数据为您的_数据2;设置您的_数据;月=月(相对于日期);检查=catx(“客户名称,月份”);跑过程打印;跑proc sort data=您的_data2 nodupkey;截止日期;通过支票;跑proc print data=您的_数据2;跑这只适用于一年的数据,如果您的数据超过一年,您将得到不正确的结果。这只适用于一年的数据,如果您的数据超过一年,您将得到不正确的结果。