SAS:如何在格式化变量上使用where语句?

时间:2018-06-03 16:10:58

标签: sql sas

我正在使用两个数据集,我已对其进行了许多更改和更改。 其中一个主要方法是将数据集上的日期更改为Jan09(monyy)格式。 使用我使用的第一个数据集和intck格式来更改它。第二个是我创建了一个宏变量。

我的问题是,我现在想根据特定月份分离结果,但每次我使用where month = 'Jan09' f.e。我得到一个错误,说变量不存在。

有谁知道如何在此上下文中使用where语句?

非常感谢

2 个答案:

答案 0 :(得分:0)

更改日期值变量的格式不会更改基础值。

尝试其中任何一种

where put(<date-variable>, yymon7.) = '2009JAN';
where intck ('month', <date-variable>, '01-JAN-2009'D) = 0;

如果你有创建一个包含格式化值的新变量,那么可以在where子句中使用格式化的值

data …
  set …
  <month-variable> = put (<date-variable>, yymon.);
run;

proc what-ever data=have;
  where <month-variable> = '2009JAN';
  …

答案 1 :(得分:0)

如果是SAS日期,您有多个选项,但其中一个是仍存储基础日期。假设它是SAS日期,名称是myDate:

where myDate between '01Jan2009'd and '31Jan2009'd;

显然这不是很好,因为你必须知道月底。

另一种选择是使用月/年来过滤掉它:

where month(myDate) = 1 and year(myDate) = 2009;

还有一种方法是将其转换为文本并进行文本比较:

where put(myDate, monyy5.) = 'JAN09'; *case sensitive here;

请注意,SAS摘要过程遵循一种格式,因此,如果您尝试按月执行摘要,包括CLASS或BY变量中的日期将按预期工作,但PROC SQL不会使用格式化变量汇总数据。