在 SAS 中使用 "PROC FORMAT" 重新排列字符列

Rearrange character column using "PROC FORMAT" in SAS

我想获取以下数据变量:

"Nebraska-Iowa"
"Washington-Arkansas"
"Illinois-Utah"

并对其进行转换,使其将连字符周围的字符组按字母顺序排列:

"Iowa-Nebraska"
"Arkansas-Washington"
"Illinois-Utah"

有没有简单的方法来做到这一点?我需要围绕连字符拆分字符串,必要时重新排列,然后再粘贴回去。

更新

在研究了 Matthew 的回答之后,我决定将其推广到具有以下数据集的任意数量的州:

Nebraska-Iowa
Washington-Arkansas-Texas
Illinois-Utah
Colorado

这是我要构建的代码。我正在苦苦挣扎的是构建一个我循环遍历的数组,拉出适当的单词,然后在排列后将它们粘贴回一起。请帮忙!

/*Example dataset*/
data have;
    format text .;
    input text;
    datalines;  
Nebraska-Iowa
Washington-Arkansas-Texas
Illinois-Utah
Colorado
run;

/*Rearrange strings in dataset*/
data arrangestrings;
    set have;
    length result ;
    howmanyb = countc(text,'-');
    howmany = howmanyb + 1;
    array state[howmany] _character_;
    do i=1 to howmany;
         state[i] = scan(text, i, '-');
    end;
    call sortc(of state(*));
    result = catx("-", state[*]);
    keep result;
run; 

我认为您不需要为这样的任务定义用户定义的格式。内置的 scan 方法是你的朋友:

data have;
    format text .;
    input text;
    datalines;  
Nebraska-Iowa
Washington-Arkansas
Illinois-Utah
run;


data want;
    set have;
    length word1 word2 result ;
    word1 = scan(text, 1, '-');
    word2 = scan(text, 2, '-');
    result = ifc(word1 <= word2, text, catx('-', word2, word1));
run;

proc print data=want;
run;

如果您不熟悉我使用的内置函数(scanifccatx),请查看文档:

http://support.sas.com/documentation/cdl/en/allprodslang/67244/HTML/default/viewer.htm#syntaxByType-function.htm