SAS Enterprise Guide 计数 IF

SAS Enterprise Guide Count IF

我希望能够在类似于以下的数据集上执行相当于计数的操作。我发现了类似 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

但最终只计算了总日期出现次数,而不考虑我的 between 语句。

假设您使用的是查询生成器,您可以使用如下内容:

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

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

我不喜欢这种类型的解决方案,因为它不是动态的,也就是说,如果您的年龄发生变化,您必须更改您的代码,而且如果发生这种情况,代码中也不会 return 出错。更好的解决方案是通过 Year/PrimKey 执行摘要任务,然后使用转置任务以您想要的结构获取数据。