sql—如何在sas中使用where条件下不同格式的数据进行输出

oxosxuxt  于 2021-07-26  发布在  Java
关注(0)|答案(1)|浏览(347)

我有一个使用date2的查询

call symput('date2',strip(" ' "||put(intx('month',today(),-2,'B'),date9.))||" ' "));
%put &date2;

基本上是运行日期前2个月的第一天
我还有另一个日期是2015年1月30日
我想为date列编写一个where条件,例如

where datecolumn >= '30jan2015'd and datecolumn <= &date2;

当我试着这样做的时候,我得到了一个错误 Expression using greater than or equal has components that are of different data types. 有谁能帮我修改查询以使where条件运行吗?

kyvafyod

kyvafyod1#

sas日期值是一个数字,表示从 01-JAN-1960 ,或日期文字,它是形式的构造 "<day>-<month>-<year>"D .
宏变量使用 & 源代码中的符号,而不是 $ . 您是从不同的编码语言来sas的吗 PHP ?
因为范围检查包含端点,所以可以简化 where 您正在使用 BETWEEN 而不是操作员。
例子:


* place an unformatted date value (i.e. data value number) in macro variable;

data _null_;
  call symput('date2',intx('month',today(),-2,'B')); 
run;

* more code using a date literal and resolved macro variable;

data myDateRangeSubset;
  set BigData;
  where datecolumn between '30jan2015'd and &date2;
run;

如果您仍然收到关于不同数据类型的日志消息,则可能必须转换 datecolumn 从字符串到相应的sas日期值。

where input(datecolumn,date9.) between '30jan2015'd and &date2;

相关问题