If statement SAS:如何编写IF语句对特定日期之前和之后的数据进行分类

If statement SAS:如何编写IF语句对特定日期之前和之后的数据进行分类,if-statement,sas,If Statement,Sas,我有一个表,其中一列名为DATE1,格式为YYYY-MM-DD,我需要创建另一列将数据分为两组。我应该如何编写代码?我认为问题在于日期格式,语法应该改变 Data Tabla1; set &tTable0; if DATE1 < 2001-12-31 THEN DATE1_AUX = "<2001"; else DATE1_AUX = >2001; keep Date1 DATE1_AUX;

我有一个表,其中一列名为DATE1,格式为YYYY-MM-DD,我需要创建另一列将数据分为两组。我应该如何编写代码?我认为问题在于日期格式,语法应该改变

    Data Tabla1;
    set &tTable0; 

    if DATE1 < 2001-12-31 THEN DATE1_AUX = "<2001"; else
   DATE1_AUX = >2001;

    keep    Date1
            DATE1_AUX;

    run;
数据表1;
set&tTable0;
如果DATE1<2001-12-31,则DATE1_AUX=“尝试以下操作:

Data Tabla1;
    set &tTable0; 
    if put(DATE1,yymmdd10.)< '2001-12-31' THEN DATE1_AUX = "<2001";
    else DATE1_AUX =">2001";
    keep  Date1 DATE1_AUX;
    run;
数据表1;
set&tTable0;
如果将(日期1,yymmdd10.)放入“2001-12-31”,则日期1_AUX=“2001”;
保持Date1 Date1_AUX;
跑

SAS将日期值作为自1960年1月1日起的天数存储在内部。换句话说,要比较两个日期字符串(即对其中一个进行分类),我们必须首先为每个日期字符串推断自1960年1月1日起的天数

幸运的是,有一些时态格式和函数可以让我们的生活更轻松。下面是一个解决方案,您可以使用它按照您描述的方式对日期进行分类:

data Table0;
    format DATE1 YYMMDD10.; 
    input DATE1 YYMMDD10.;
    cards;
2001-12-30
2001-12-31
2002-01-01
;
run;

data Table1;
    length DATE1_AUX $ 10.;
    set Table0;
    if DATE1 < input('2001-12-31',YYMMDD10.) then DATE1_AUX = '< 2001';
    else                                          DATE1_AUX = "> 2001";
run;

如果未创建新变量,并且未更改
DATE1
存储的值,但表格和图形中日期的格式表示将被分类。

DATE1
数字还是字符?在
else
语句中
>2001
应在引号中作为
>2001“
.explicit-是
date1
一个SAS日期值(因此,未格式化的值类似于
16143
),还是字符串[或字符串的数字表示],
“2001-05-12”
或类似值?”?(如果您不太了解SAS日期,无法了解该答案,请尝试添加一个-
数据表1;设置&tTable0;new_date=date1+1;run;
,然后查看您是否得到比旧值晚一天的新值,或者如果您在日志中收到关于字符数字转换的投诉,然后在new_date字段中缺少一个值。)这似乎并没有以一种特别有效的方式回答这个问题,也没有包含任何关于它如何工作的解释。
proc format;
    value aux_fmt  low - '31DEC31'd  = '< 2001'
                   '01JAN01'd - high = '> 2001';
run;

data Table1;
    set Table0;
    format DATE1 aux_fmt.;
run;