我对SAS和SQL还是很陌生,非常感谢您的帮助。
我有一个包含学生ID,学期和audit_type的数据集。每个学期都有2个audit_type,并且学生可以出现在两个审计类型中或两个同时出现。
我需要为每个学期的每个学生id为这3种情况中的每一个创建一个标记:1)如果该学生出现在 only audit_type_1 ,2)如果他/他出现在< strong>仅audit_type_2 和3)在此期间,他/她同时出现在 audit_type_1和audit_type_2上。不确定如何发布我的数据,但是在这里
| Id | Term | Audit_type |
|---- |------------- |-----------: |
| 1 | Fall 2016 | 1 |
| 1 | Fall 2016 | 2 |
| 2 | Winter 2017 | 1 |
| 3 | Winter 2017 | 2 |
| 4 | Spring 2017 | 1 |
| 4 | Spring 2017 | 2 |
如下所示,我能够使用案例为前两种情况创建一个标记:
proc sql;
create table test as
select id, term, audit_type,
case
when audit_type in ('audit_type_1') then 1
when audit_type in ('audit_type_2 ') then 2
end as audit_type_flag
from have;
我不知道如何标记第三个场景。所有帮助将不胜感激。在此先感谢您的帮助和支持。所以,我想要以下内容:
| Id | Term | Audit_type | Flag |
|---- |------------- |-----------: |------ |
| 1 | Fall 2016 | 1 | 3 |
| 1 | Fall 2016 | 2 | 3 |
| 2 | Winter 2017 | 1 | 1 |
| 3 | Winter 2017 | 2 | 2 |
| 4 | Spring 2017 | 1 | 3 |
| 4 | Spring 2017 | 2 | 3 |
答案 0 :(得分:0)
只需使用其他else
即可解决问题
select id, term, audit_type,
case
when audit_type in ('audit_type_1') then 1
when audit_type in ('audit_type_2 ') then 2
else 3
end as audit_type_flag
from have;
答案 1 :(得分:0)
我在这里在两行之间进行阅读,并假设您使用的逻辑是Audit_Type = 1然后Flag = 1,Audit_Type = 2然后Flag = 2,如果两者均为3,那么我将这些标志加在一起获得了3。这可能不是您要追求的(您可能还需要4、5、6和7标志),这只是基于少量数据并且不知道确切用例的假设,因此,我将提供一个解决方案,如果正确,请告诉我,我将添加解释语法的注释。如果您所要查找的代码不完全是我想要的,我不想花时间解释它。
关于, 斯科特
更新
我已经在代码中添加了注释以及指向页面的链接,这可以帮助您更好地理解我在说什么。
dict = {'fruit': ['apple', 'peach', 'banana'], 'animal': ['cat', 'sheep']}
进一步阅读:
答案 2 :(得分:0)
我认为您需要汇总:
proc sql;
create table test as
select id, term, audit_type,
(case when min(audit_type) <> max(audit_type) then 1
when min(audit_type) = 2 then 2
when min(audit_type) = 3 then 3
end) as audit_type_flag
from have
group by id, term;