PRO C FCMP возвращает неверную длину строки - PullRequest
0 голосов
/ 13 июля 2020
proc fcmp outlib=work.func.conversion;
function upper_vn(province $) $;
length new_province $200; 
    if province in ("TỈNH QuẢNG NINH", "TỈNH QUẢNG NINH") then new_province = "TỈNH QUẢNG NINH";
    if province in ("TỈNH THỪA THIÊN HUẾ","TỈNH THỪA THIÊN-HUẾ","TỈNH THỪA THIÊN-HuẾ") then new_province = "TỈNH THỪA THIÊN HUẾ";
    if province in ("TỈNH TiỀN GIANG","TỈNH TIỀN GIANG") then new_province = "TỈNH TIỀN GIANG";
    else new_province = province;
return (new_province);
endsub;
run; 
options cmplib=(work.func); 

data test; 
length test_string $ 50; 
input test_string & $;
datalines;
"TỈNH THỪA THIÊN-HUẾ"
"TỈNH TIỀN GIANG";
run; 


data output;
set test;
length test_string $ 50;
length newprovince $ 50;
newprovince = upper_vn(test_string );
run;

Итак, я создаю функцию в SAS, но результат вывода не возвращает полную длину строки вывода. Что могло быть не так?

1 Ответ

2 голосов
/ 13 июля 2020

В дополнение к приведенному выше комментарию Тома вам необходимо объявить длину new_province внутри функции, а также длину вывода функции.

proc fcmp outlib=work.func.conversion;
function Unify_Agc(province $) $ 200;
    length province new_province $200;
    if province in ("TỈNH QuẢNG NINH", "TỈNH QUẢNG NINH") then new_province = "TỈNH QUẢNG NINH";
    if province in ("TỈNH THỪA THIÊN HUẾ","TỈNH THỪA THIÊN-HUẾ","TỈNH THỪA THIÊN-HuẾ") then new_province = "TỈNH THỪA THIÊN HUẾ";
    if province in ("TỈNH TiỀN GIANG","TỈNH TIỀN GIANG") then new_province = "TỈNH TIỀN GIANG";
    else new_province = province;
return (new_province);
endsub;
run; 
options cmplib=(work.func); 
...