Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/date/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Date 下面的宏在日期(月)方面做了什么。是否将时间段设置为一个月以及每次设置哪个月?_Date_Macros_Sas - Fatal编程技术网

Date 下面的宏在日期(月)方面做了什么。是否将时间段设置为一个月以及每次设置哪个月?

Date 下面的宏在日期(月)方面做了什么。是否将时间段设置为一个月以及每次设置哪个月?,date,macros,sas,Date,Macros,Sas,我使用静态日期计算行数(例如datefield>=01/02/2019和datefield最后两个很简单。截止日期是上个月的最后一天。最后一个MMMYY就是该格式的当前月份 对于其他两个,它正在根据一年中的月份调整日期的更改量 为了弄清楚这一点,你可能只需要为自己制作一个小的真值表,一年中每个月有一行,为不同的目标宏变量列。因此,也许只需要写下今天的月份,然后为新的宏变量生成哪个月份 data _null_; do m_month=1 to 12 ; today = mdy(m_month,

我使用静态日期计算行数(例如datefield>=01/02/2019和datefield最后两个很简单。截止日期是上个月的最后一天。最后一个MMMYY就是该格式的当前月份

对于其他两个,它正在根据一年中的月份调整日期的更改量

为了弄清楚这一点,你可能只需要为自己制作一个小的真值表,一年中每个月有一行,为不同的目标宏变量列。因此,也许只需要写下今天的月份,然后为新的宏变量生成哪个月份

data _null_;
do m_month=1 to 12 ;
  today = mdy(m_month,1,2018);
  if M_month in (1 2 3 4 5 6) then M_StartDate = intnx('month', today ,-2-M_month,'b');
  else M_StartDate = intnx('month', &today ,4-M_month,'b');

  if M_month in ( 5 6)then M_EndDate = intnx('month', today ,3-M_month,'e');
  else if  M_month in ( 11 12) then M_EndDate = intnx('month', today ,9-M_month,'e');
  else M_EndDate = intnx('month', today ,-1,'end');

  put (today m_startdate m_enddate) (=yymmdd10.);
end;
run;
结果

today=2018-01-01 M_StartDate=2017-10-01 M_EndDate=2017-12-31
today=2018-02-01 M_StartDate=2017-10-01 M_EndDate=2018-01-31
today=2018-03-01 M_StartDate=2017-10-01 M_EndDate=2018-02-28
today=2018-04-01 M_StartDate=2017-10-01 M_EndDate=2018-03-31
today=2018-05-01 M_StartDate=2017-10-01 M_EndDate=2018-03-31
today=2018-06-01 M_StartDate=2017-10-01 M_EndDate=2018-03-31
today=2018-07-01 M_StartDate=2018-04-01 M_EndDate=2018-06-30
today=2018-08-01 M_StartDate=2018-03-01 M_EndDate=2018-07-31
today=2018-09-01 M_StartDate=2018-02-01 M_EndDate=2018-08-31
today=2018-10-01 M_StartDate=2018-01-01 M_EndDate=2018-09-30
today=2018-11-01 M_StartDate=2017-12-01 M_EndDate=2018-09-30
today=2018-12-01 M_StartDate=2017-11-01 M_EndDate=2018-09-30
  • 删除调用symput并改为创建变量

    call symput('M_StartDate', put(intnx('month', &today ,-2-M_month,'beginning'), date9.));
    
  • 变成:

    M_StartDate = put(intnx('month', &today ,-2-M_month,'beginning'), date9.);
    
  • 删除&today以使用变量,而不是today
  • 添加一个循环来循环日期,以查看不同的范围

    data demo;
    
    
    do today='01Jan2019'd to '31Dec2019'd;
    M_month=month(today);
    
    if M_month in (1 2 3 4 5 6) then
        M_StartDate=put(intnx('month', today , -2-M_month, 'beginning'), date9.);
    else
        M_StartDate=put(intnx('month', today , 4-M_month, 'beginning'), date9.);
    
    if M_month in (5 6)then
        M_EndDate=put(intnx('month', today , 3-M_month, 'end'), date9.);
    else if M_month in (11 12) then
        M_EndDate=put(intnx('month', today , 9-M_month, 'end'), date9.);
    else
        M_EndDate=put(intnx('month', today , -1, 'end'), date9.);
    M_CuttOffDate=put(intnx('month', today , -1, 'end'), date9.);
    run_MMMYY=put(intnx('month', today , 0, 'end'), EURDFMY5.);
    output;
    end;
    run;
    

  • 然后,您可以检查输出,查看范围是什么,以及它们是否符合您的预期。它看起来是一个变化的动态范围。

    这不是一个宏。它是一个数据步骤(数据为空)这是在创建一些宏变量。那么问题是什么?谢谢!所以问题仍然是每次运行此月报时选择的时间段是什么?是上个月?还是前6个月?我试图计算每次运行此数据步骤时选择的时间段。所以问题仍然是什么时间段riod每次运行此月报时都会选择?是上个月?还是前6个月?我正在尝试计算每次运行此数据步骤时所选择的时间段。-非常感谢!我会回去报告的!:)非常感谢!
    data demo;
    
    
    do today='01Jan2019'd to '31Dec2019'd;
    M_month=month(today);
    
    if M_month in (1 2 3 4 5 6) then
        M_StartDate=put(intnx('month', today , -2-M_month, 'beginning'), date9.);
    else
        M_StartDate=put(intnx('month', today , 4-M_month, 'beginning'), date9.);
    
    if M_month in (5 6)then
        M_EndDate=put(intnx('month', today , 3-M_month, 'end'), date9.);
    else if M_month in (11 12) then
        M_EndDate=put(intnx('month', today , 9-M_month, 'end'), date9.);
    else
        M_EndDate=put(intnx('month', today , -1, 'end'), date9.);
    M_CuttOffDate=put(intnx('month', today , -1, 'end'), date9.);
    run_MMMYY=put(intnx('month', today , 0, 'end'), EURDFMY5.);
    output;
    end;
    run;