SAS SQL 与 "Like" 和 '%___%'

SAS SQL with the "Like" and '%___%'

我有一个数据集,我在其中读取了 excel 电子表格的多张纸。其中一个变量 (OrderDate) 的格式为“04-Aug-95”,但当我打印时,它显示为“04AUG1995”。

我正在尝试编写代码来 return 1995 年第一季度的订单数。但是,下面的代码 return 列出了数据集和 Count 为 830(这是总行数)。非常感谢任何帮助:

proc sql;
select OrderDate, count(*) as Count
from Orders
where OrderDate LIKE '%JAN1995' OR '%FEB1995' OR '%MAR1995';
quit;

如果您的订购日期存储在日期中,那么您可以像下面这样,第一季度包括一月二月和三月

 Proc sql;
  select OrderDate, count(*) as Count
   from Orders
 where qtr(OrderDate) = 1 and year(OrderDate)=1995;
quit;

不要将格式误认为值。

excel 中的日期存储为自 1/1/1970 以来的天数。 04-Aug-95 的日期在 excel 中的值为 34915,其格式非常适合显示给您。

SAS 的相似之处在于日期值和日期格式的存储方式相似。不同之处在于 SAS 中的纪元是 1/1/1960(比 excel 早 10 年)。

因为日期值实际上是数值,所以对它们使用 like 语句实际上没有意义。您真的想 select 使用 where 子句的日期范围。 IE。 where OrderDate between '01jan1995'd and '31mar1995'd.

试试(在 where 子句中):

Put(OrderDate, Date9.) like '%JAN1995' OR Put(OrderDate, Date9.) like '%FEB1995' OR Put(OrderDate, Date9.) like '%MAR1995'

或者:

Where Case When Put(OrderDate, Date9.) like '%JAN1995' Then 1
           When Put(OrderDate, Date9.) like '%FEB1995' Then 1
           When Put(OrderDate, Date9.) like '%MAR1995' Then 1
           Else 0
      End