我正在使用两个数据集,我已对其进行了许多更改和更改。 其中一个主要方法是将数据集上的日期更改为Jan09(monyy)格式。 使用我使用的第一个数据集和intck格式来更改它。第二个是我创建了一个宏变量。
我的问题是,我现在想根据特定月份分离结果,但每次我使用where month = 'Jan09'
f.e。我得到一个错误,说变量不存在。
有谁知道如何在此上下文中使用where语句?
非常感谢
答案 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不会使用格式化变量汇总数据。