SAS企业指南计数IF

时间:2015-02-06 16:08:53

标签: count sas enterprise-guide

如果在类似下面的数据集上,我希望能够执行相当于计数的操作。我找到了类似的here,但我不确定如何将其翻译成企业指南。我想创建几个新列,按年计算每个主键的日期出现次数,例如:

PrimKey   Date
1         5/4/2014
2         3/1/2013
1         10/1/2014
3         9/10/2014

要成为这样:

PrimKey   2014   2013
1         2      0
2         0      1
3         1      0

我希望在查询构建器中使用计算字段的高级表达式选项,但是如果有另一种更好的方法我完全打开。 这是我尝试过的(并且失败了):

CASE  
   WHEN Date(t1.DATE) BETWEEN Date(1/1/2014) and Date(12/31/2014)
   THEN (COUNT(t1.DATE))
END

但最终只计算了总日期,而不考虑我之间的陈述。

1 个答案:

答案 0 :(得分:3)

假设您正在使用Query Builder,您可以使用以下内容:

我认为您不需要CASE语句,而是使用YEAR()函数计算年份并测试它是否等于2014/2013。对于相等性的测试将返回1/0,其可以总计为每组的总数。确保在查询构建器的GROUP BY部分中包含PrimKey。

sum(year(t1.date)=2014) as Y2014,
sum(year(t2.date)=2013) as Y2013,

我不喜欢这种类型的解决方案,因为它不是动态的,即如果您的年份发生变化,您必须更改代码,并且如果发生这种情况,代码中没有任何内容可以返回错误。更好的解决方案是按年/ PrimKey执行摘要任务,然后使用转置任务获取所需结构中的数据。