Sas 日期和间隔语句

Sas 日期和间隔语句,sas,Sas,我正在使用SAS,例如7.1 我有以下代码: data time_dim_monthly; do i = 0 to 200; index_no = i; year_date = year(intnx('month','01JAN2008'd,i)); month_date = month(intnx('month','01JAN2008'd,i)); SOM = put(intnx('month', '01JAN2008'

我正在使用SAS,例如7.1

我有以下代码:

data time_dim_monthly;

    do i = 0 to 200;
        index_no = i;
        year_date = year(intnx('month','01JAN2008'd,i));
        month_date = month(intnx('month','01JAN2008'd,i));
        SOM = put(intnx('month', '01JAN2008'd, i, 'b'),date11.) ; 
        EOM = put(intnx('month', '01JAN2008'd, i, 'e'),date11.) ; 
        days_in_month = INTCK('day',intnx('month', '01JAN2008'd, i, 'b'),
                        intnx('month', '01JAN2008'd, i, 'e')); 
        output;
    end;
run;

proc sql;
    create table calendar as 
        select year_date, month_date, index_no, put(today(),date11.) as todays_dt, som, eom
            from time_dim_monthly
                where put(today(),date11.) between som and eom
/*or datepart((INTNX('month',today(),-1)) between som and eom)*/
        order by index_no
                ;
quit;
输出如下所示:

year_date   month_date  index_no    todays_dt   SOM EOM
2008    10  9   31-MAY-2017 01-OCT-2008 31-OCT-2008
2009    10  21  31-MAY-2017 01-OCT-2009 31-OCT-2009
2010    10  33  31-MAY-2017 01-OCT-2010 31-OCT-2010
2011    10  45  31-MAY-2017 01-OCT-2011 31-OCT-2011
2012    10  57  31-MAY-2017 01-OCT-2012 31-OCT-2012
2013    10  69  31-MAY-2017 01-OCT-2013 31-OCT-2013
2014    10  81  31-MAY-2017 01-OCT-2014 31-OCT-2014
2015    10  93  31-MAY-2017 01-OCT-2015 31-OCT-2015
2016    10  105 31-MAY-2017 01-OCT-2016 31-OCT-2016
2017    5   112 31-MAY-2017 01-MAY-2017 31-MAY-2017
2017    10  117 31-MAY-2017 01-OCT-2017 31-OCT-2017
2018    5   124 31-MAY-2017 01-MAY-2018 31-MAY-2018
2018    10  129 31-MAY-2017 01-OCT-2018 31-OCT-2018
2019    5   136 31-MAY-2017 01-MAY-2019 31-MAY-2019
2019    10  141 31-MAY-2017 01-OCT-2019 31-OCT-2019
2020    5   148 31-MAY-2017 01-MAY-2020 31-MAY-2020
2020    10  153 31-MAY-2017 01-OCT-2020 31-OCT-2020
2021    5   160 31-MAY-2017 01-MAY-2021 31-MAY-2021
2021    10  165 31-MAY-2017 01-OCT-2021 31-OCT-2021
2022    5   172 31-MAY-2017 01-MAY-2022 31-MAY-2022
2022    10  177 31-MAY-2017 01-OCT-2022 31-OCT-2022
2023    5   184 31-MAY-2017 01-MAY-2023 31-MAY-2023
2023    10  189 31-MAY-2017 01-OCT-2023 31-OCT-2023
2024    5   196 31-MAY-2017 01-MAY-2024 31-MAY-2024
虽然我希望它只会给我一行:

2017年5月112日2017年5月31日2017年5月01日2017年5月31日

希望您能帮助理解为什么会发生这种情况

谢谢你这是你的错误:

SOM = put(intnx('month', '01JAN2008'd, i, 'b'),date11.) ; 
EOM = put(intnx('month', '01JAN2008'd, i, 'e'),date11.) ; 
where put(today(),date11.) between som and eom
put创建一个字符变量。你不应该在字符变量中使用between,除非你真的知道你在做什么,它会按字母顺序进行比较

使用数字变量。扔掉这个球。相反,使用format语句使变量看起来漂亮,但仍然是数字

SOM = intnx('month', '01JAN2008'd, i, 'b') ; 
EOM = intnx('month', '01JAN2008'd, i, 'e') ; 
format som eom date11.;
后来


EG版本大部分是不相关的-相关版本是SAS版本;虽然您可以使用7.1连接到旧版本,但可能是与EG 7.1附带的9.4。
where today() between som and eom