【发布时间】:2014-03-27 19:42:44
【问题描述】:
我正在编写 SAS 代码,由于我是 SAS 新手(一直从事 R 工作),我无法理解 SAS 中的日期格式。
我有一个 SAS 数据集 Sales_yyyymm,我正在创建一个代码,该代码接受用户输入的日期值,如果该日期存在销售数据,我需要创建一个标志为 1否则为 0。目前我正在使用此代码 -
%Let check_date = 20010120;
Data A;
Set B;
If date=&check_date then Date_Flag = 1;
else Date_Flag = 0;
run;
date 是我的 SAS 数据集 Sales_yyyymm 中的日期列,其值类似于 20130129、20110412、20140120 等。
但是,如果我运行此代码,我的所有 Date_Flag 值都为 0。IF 条件被忽略,我不确定这是如何发生或为什么发生的。
有什么想法吗?
谢谢!
【问题讨论】:
-
我怀疑
date列实际上是一个日期,其格式显示为 yyyymmdd,即日期不是 8 位整数。检查proc contents data =<your dataset>; run;输出并报告date列的类型和格式 -
还有一件事——在 SAS 中,日期文字应该是“DDMMMYYYY”d 格式。如果事实上
date列确实存储为日期类型列,这将很重要。 -
我刚查了一下,发现
date列的类型为NUM和Len 4,格式为YYMMDDN8。 -
SAS 中的
Format只是一种打印人眼看起来不错的东西的方法——类似于在 c++ 中使用sprintf。它与基础价值无关,也不允许在等式中使用(没有其他一些功能,如put,它直接等效于sprintf)。
标签: date if-statement sas