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



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

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

有谁知道我如何在这种情况下使用 where 语句?

多谢

如果是 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 不会使用格式化变量汇总数据。

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

尝试以下任一

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';
…

最新更新