查找 minimum/oldest 两种不同格式的每个订户的创建日期 SAS

Finding minimum/oldest create date for each subscriber in two different formats SAS

我有一个呼叫记录数据集,该数据集是针对一组多次呼叫的订户进行的,每次呼叫尝试都在一个新行上进行。我需要根据第一次与订户联系的时间来分析一些数据,但我无法提取最短联系日期。我已经尝试了一些东西,但我创建的唯一成功的输出只是输出已经链接到线路的创建日期(这是我需要为每个订户的一组呼叫获取最小值的变量),而不是最小的在数据集中为该订阅者创建日期。

我理想的结果是这样的(其中 min_date/min_month 是我要创建的变量):

订阅者 ID |创建日期 | Min_date | Min_month

123456 | 2020 年 1 月 1 日 | 2020 年 1 月 1 日 | 2020 年 1 月
123456 | 2020 年 3 月 5 日 | 2020 年 1 月 1 日 | 2020 年 1 月

我在输出格式方面也遇到了一些问题。当我确实得到输出时,我得到的日期格式是某种顺序数字代码?例如,我会得到类似“22095”的信息,而不是任何类型的实际日期。

我用来提取最短日期的代码:


create table  min_dates as 

select 
sub_id,
min2.min_date2


from (select 'Subscriber ID'n as sub_id, min('Create Date'n) as  min_date2 from work.min) as min2

inner join work.min as min1 on min1.'Subscriber ID'n = min2.sub_id;



quit;

我认为这可能有效,但由于格式问题我无法确定。当我在代码末尾将此子表重新加入主数据拉取时,所有值也都丢失了。如果代码正确,我还需要两件事:

但如果它是错误的并且只是在同一行给我日期,我也需要修正它。

感谢任何帮助。

SAS 日期值只是具有特殊含义的数字(自 01jan1960 以来的天数)。

将格式应用于所选变量,它将显示为人类可读的日期。

select 
  sub_id,
  min2.min_date2 format=DATE9.
from
  ...

变量最初是计算出来的,没有应用格式。这就是为什么您的原始代码将日期值显示为数字的原因。

如果您想使用 SQL,您必须告诉 SAS 使用什么格式来显示您的计算变量。要按组聚合,请使用 GROUP BY 子句。

select Subscriber_Id, min(Create_Date) as min_date2 format=date9.
  from have
  group by Subscriber_Id
;

如果您改用 PROC SUMMARY,则计算出的变量将具有与源变量相同的附加格式。您可以使用 CLASS 语句进行分组,或者如果数据使用 BY 语句排序。

proc summary nway data=have ;
  class Subscriber_Id;
  var Create_Date ; 
  output out=want min=min_date2 ;
run;

要获得精确的 table 每组多个观察结果,您可以使用 PROC SQL 的功能自动将汇总统计数据与详细观察结果重新合并。

select Subscriber_Id
     , Create_Date
     , min(Create_Date) as min_date format=date9.
     , min(Create_Date) as min_month format=monyy7.
  from have
  group by Subscriber_Id
;