我有sql代码,在第一部分中,我创建了信用表,其中有kl_nazwa项。现在我想创建另一个表,并为每个项目添加一个国家,但我想将kl_nazwa中的值分配给项目积分。但我的代码不起作用。应该怎么做?
我的代码:
proc sql;
create table COREP as
select
spr_DATA_SPR as DATA_DANYCH format yymmdd10.,
"Kredyty hipoteczne" as RODZAJ_AKTYWÓW format $50. length=50,
ID as ID format $50. length=50,
kl_NAZWA
spr_WAL_OPIS as WALUTA format $3. length=3,
CRD_EKSP_PIER_DC_FIN as EXP_PIERWOTNA format commax16.2,
-CRD_KOR_DC_FIN as KOREKTA format commax16.2,
CRD_AC_ORIGIN as CRD_AC_ORIGIN format $2. length=2,
CRD_AC as CRD_AC format $2. length=2,
CRD_CCF as CRD_CCF format commax16.2,
CRD_RWG as CRD_RWG format commax16.2,
DESC_2 as CRD_BIL_POZABIL format $1.
from kredyty;
proc sql;
create table COREP as
select (*)
case
when (RODZAJ_AKTYWÓW) = 'Instrumenty pochodne' Then 'Polska'
when (RODZAJ_AKTYWÓW) = 'Pozostałe aktywa' then 'Polska'
when (RODZAJ_AKTYWÓW) = 'Nostra' then 'Polska'
when (RODZAJ_AKTYWÓW) = 'Papiery wartościowe' then 'Polska'
when (RODZAJ_AKTYWÓW) = 'Kredyty' then kl_nazwa
as kraj
from corep
;
quit;
解决方案:
应添加
else
proc sql;
create table COREP as
select *,
case
when (RODZAJ_AKTYWÓW) = 'Instrumenty pochodne' Then 'Polska'
when (RODZAJ_AKTYWÓW) = 'Pozostałe aktywa' then 'Polska'
when (RODZAJ_AKTYWÓW) = 'Nostra' then 'Polska'
when (RODZAJ_AKTYWÓW) = 'Papiery wartościowe' then 'Polska'
else kl_kraj_opis
end as Kraj
from corep
;
quit;
理论上这应该是答案:
- 使用IN而不是多个=
- 在后面添加逗号*
- 在CASE中添加END
proc sql;
create table COREP as
select (*)
case
when (RODZAJ_AKTYWÓW) in ('Instrumenty pochodne',
'Pozostałe aktywa',
'Nostra',
'Papiery wartościowe') then 'Polska'
when (RODZAJ_AKTYWÓW) = 'Kredyty' then kl_nazwa
else kl_kraj_opis
end as kraj
from corep
;
quit;
除此之外,在您的原始查询中:
"Kredyty hipoteczne" as RODZAJ_AKTYWÓW format $50. length=50,
它将COREP中变量的所有值设置为字符常量,这使CASE变得无用,因为它将始终为空。我怀疑那句话不正确。如果变量中有空格,则末尾需要一个n,即
"Kredyty hipoteczne"n as RODZAJ_AKTYWÓW format $50. length=50,