PROC SQL / SAS - 获取每个月的活动产品?

PROC SQL / SAS - Get every month of an active product?

各位网友大家好,我需要你们的帮助。我是 SQL 编程的极度新手,我需要帮助来处理我正在使用的东西。

这是我现在在 TABLE1 中的内容

    CustNbr ProductNm  ExpirationDt(date value)
    AAA111  Product1    15MAY2017
    AAA112  Product1    21JAN2017

这就是我想要的:

    CustNbr Yr   Mth  ProductNm
    AAA111 2017  01   Product01
    AAA111 2017  02   Product01
    AAA111 2017  03   Product01
    AAA111 2017  04   Product01
    AAA111 2017  05   Product01
    AAA112 2017  01   Product01

本质上,我希望每月查看客户对活跃产品的看法,而不仅仅是他们的到期日期。我可以用什么样的表达方式来重现我想要的table?

非常感谢抽出时间。

使用下面的代码

SELECT     CustNbr, YEAR(ExpirationDt) AS Yr, MONTH(ExpirationDt) AS Mnt, ProductNm
FROM         TableName

这是一种让您的数据爆炸式增长的方法。您需要 select 开始日期。 INTNX 函数对于在日期范围内导航很方便。

data have;
input CustID $ ProdID $ ExpDate ;
attrib
  ExpDate format=date9. informat=date9.
;
datalines;
    AAA111  Product1    15MAY2017
    AAA112  Product1    21JAN2017
run;

data want;
  set have;

  * Which start date do you want ?;
  start_date = today(); * looking forward only;
  start_date = intnx('year', ExpDate, 0); * first of the year of the expiration date;
  start_date = intnx('year', today(), 0); * first of the year at run-time;

  date = start_date;
  do index = 1 by 1 while (date < ExpDate);
    year = Year(date);
    month = Month(date);
    output;
    date = intnx('month', date, 1);

    if index > 1e5 then leave; * guard against coding/data errors causing to many loops;
  end;
  format month z2.;
  keep CustID ProdID year month;
run;