date - SAS比较两个日期
问题描述
我有一个 sas 文件,看起来像
date1 date2 date3 comp
20201208 20110201 20120201
20201208 20200101 20210201
所有日期都是数字,格式为 yymmddn8。comp 是文本类型。
现在我想用 1 或 0 填充 comp
if date2 < date1 < date3 then comp=1; else comp=0;
但t work. I always get
即使条件为真,它也不会 1`。
节目(来自评论)
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 日期。所以更大的问题是当你将它与tday
是 SAS 日期的变量进行比较时。
看看下面的这个 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;
推荐阅读
- c - 用户输入超过 1 个项目并计算总价
- ruby-on-rails - 如何获取每个元素的嵌套属性到 Ruby on Rails 中的数组?
- c# - 带有时区 C# 的时间戳格式
- node.js - 无服务器框架:未找到无服务器错误功能:
- javascript - 在 FlatList(native) 上呈现数据的错误 - React Native
- java - 出现异常如何自动重启springboot应用
- laravel - 上传本地服务器 - 找不到类 'Illuminate\Support\Facades\Input'
- javascript - Javascript 和 Python 之间的差异
- linux - 在 Linux 中使用 grep 和 AWK 命令获取文件列表
- ubuntu - VSCode 调试器不使用递归函数