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

时间:2017-02-28 15:24:47

标签: if-statement sas

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

    </nav>
    <!-- Latest compiled and minified JavaScript -->
    <script src="https://code.jquery.com/jquery-3.1.1.min.js"></script>
    <script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/js/bootstrap.min.js" integrity="sha384-Tc5IQib027qvyjSMfHjOMaLkfuWVxZxUPnCJA7l2mCWNIpG9mGCD8wGNIcPD7Txa" crossorigin="anonymous"></script>
</body>
</html>

2 个答案:

答案 0 :(得分:0)

试试这个:

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 :(得分:0)

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;

在此我们必须首先将字符串2001-12-31转换为代表SAS日期的数字,然后才能使用它来进行比较。

可能适用的另一个想法是制作自定义格式:

proc format;
    value aux_fmt  low - '31DEC31'd  = '< 2001'
                   '01JAN01'd - high = '> 2001';
run;

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

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