Sas 根据以下情况使用联接条件更新SQL:
我有一个具有以下结构的数据集(基本):一个列,每个记录都有一个索引,一个列有一个分类类型、分类值和一个我想填充的列Sas 根据以下情况使用联接条件更新SQL:,sas,Sas,我有一个具有以下结构的数据集(基本):一个列,每个记录都有一个索引,一个列有一个分类类型、分类值和一个我想填充的列 NAME |CLASSIFICATION|VALUE|STANDARD VALUE FIDO |ALFABET |F | ALFA |STANDARD |2 | BETA |STANDARD |5 | ETA |MIXED |B65 | THETA|MIXED |A40 | 并非所有记录都具有
NAME |CLASSIFICATION|VALUE|STANDARD VALUE
FIDO |ALFABET |F |
ALFA |STANDARD |2 |
BETA |STANDARD |5 |
ETA |MIXED |B65 |
THETA|MIXED |A40 |
并非所有记录都具有相同的分类,但是我有一个附加表(转码),用于将不同的分类方法转换为标准方法(即分类):
我的目标是用第二个表中的相应值填充第四列。(具有标准分类的记录将有两列具有相同分类)。
之后,我的数据应如下所示:
NAME |CLASSIFICATION|VALUE|STANDARD VALUE
FIDO |ALFABET |F |6
ALFA |STANDARD |2 |2
BETA |STANDARD |5 |5
ETA |MIXED |B65 |8
THETA|MIXED |A40 |3
为了做到这一点,我尝试使用连接条件进行procsql更新,但它似乎不起作用
proc sql;
update BASE
left join TRASCODE
on BASE.VALUE= (
case
when BASE.CLASSIFCATION = 'ALFABET' then TRANSCODE.ALFABET
when BASE.CLASSIFICATION= 'STANDARD' then TRANSCODE.STANDARD
when BASE.CLASSIFICATION= 'MIXED then TRANSCODE.MIXED
end
)
set BASE.STANDARD_VALUE = TRANSCODE.STANDARD
;
quit;
有人能帮我吗?
非常感谢标准值的值选择是一个查找查询,因此您不能直接连接到转码 尝试对每个分类使用不同查找选择的更新查询:
ALFABET|STANDARD|MIXED
A |1 |A1
B |5 |A30
C |3 |A40
D |5 |A31
E |8 |B65
F |6 |C54
data base;
infile cards missover;
input
NAME $ CLASSIFICATION $ VALUE $ STANDARD_VALUE $; datalines;
FIDO ALFABET F
ALFA STANDARD 2
BETA STANDARD 5
ETA MIXED B65
THETA MIXED A40
run;
data transcode;
input
ALFABET $ STANDARD $ MIXED $; datalines;
A 1 A1
B 5 A30
C 3 A40
D 5 A31
E 8 B65
F 6 C54
run;
proc sql;
update base
set standard_value =
case
when classification = 'ALFABET' then (select standard from transcode where alfabet=value)
when classification = 'MIXED' then (select standard from transcode where mixed=value)
when classification = 'STANDARD' then value
else 'NOTRANSCODE'
end;
%let syslast = base;
非常感谢您快速而详细的回答,它成功了!再次感谢