SAS比较两个日期



我有一个看起来像的sas文件

date1       date2       date3       comp
20201208    20110201    20120201  
20201208    20200101    20210201

所有日期均为数字,格式为yymmddn8。并且CCD_ 2是文本类型。

现在我想像一样用1或0填充comp

if date2 < date1 < date3 then comp=1; else comp=0;

但它不起作用。即使条件为真,我也总是得到1

Progam(来自评论(

data kl.kl_neukunde; 
set kl.kl01; 
format tday yymmddn8. ; 
format date_nk yymmddn8. ; 
format date_nk_12mon yymmddn8. ; 
tday=today(); 
date_nk = put(input(erste_besuch, ddmmyy10.), yymmdd8.)*1;
date_nk_12mon = date_nk + 10000; 
if date_nk='' then date_nk=0; 
if date_nk_12mon='' then date_nk_12mon=0;
if date_nk < tday < date_nk_12mon then neukunde="1"; 

如果您要处理日期,您应该学习如何使用SAS日期,因为有很多很棒的功能可以帮助处理日期。你现在所做的是一种艰难的约会方式。了解日期的一篇好论文是:https://support.sas.com/resources/papers/proceedings/proceedings/sugi25/25/btu/25p058.pdf

对于您的特定SAS代码,您有两个问题。

一个问题是变量date_nk。与put函数一起使用的格式缺少一个"n"。格式yymmdd8.使用破折号分隔日期部分,因此当它乘以1以创建数字变量时,该值将丢失。这将创建一个不丢失的值:date_nk = put(input(erste_besuch, ddmmyy10.), yymmddn8.)*1;

然而,一旦像那样创建了date_nk,它就是数字,但不是SAS日期。因此,更大的问题是,当你将其与作为SAS日期的tday变量进行比较时。

看看下面的SAS代码是否有意义:

data want;
erste_besuch = '30-06-2020';
format tday yymmddn8. ; 
format date_nk yymmddn8. ; 
format date_nk_12mon yymmddn8. ; 
*** THIS IS A SAS DATE ***;
tday=today(); 
*** THESE ARE NUMERIC BUT -NOT- SAS DATES - SO USING DATE FORMATS WITH THESE VARIABLES IS A PROBLEM ***;
*date_nk = put(input(erste_besuch, ddmmyy10.), yymmdd8.)*1;
*date_nk = put(input(erste_besuch, ddmmyy10.), yymmddn8.)*1;
*date_nk_12mon = date_nk + 10000; 
*** THESE ARE SAS DATES ***;
date_nk = input(erste_besuch, ddmmyy10.);
date_nk_12mon = intnx('month', date_nk, 12, 'same');
*** IF DATE VARIABLES ARE MISSING, KEEP AS MISSING, DO NOT RESET TO ZERO ***;
*if date_nk='' then date_nk=0; 
*if date_nk_12mon='' then date_nk_12mon=0;
*** NOW YOU HAVE 3 VARIABLES THAT ARE ALL SAS DATES AND CAN COMPARE THEM CORRECTLY ***;
if date_nk < tday < date_nk_12mon then neukunde="1"; 
run;
title 'NEW ATTEMPT';
proc print data=want;
run;
title2 'WITHOUT FORMATS';
proc print data=want;
format _all_;
run;

相关内容

  • 没有找到相关文章

最新更新