SAS PROC FORMAT遵循什么字母数字排序方案?

时间:2014-10-27 11:07:14

标签: sas alphanumeric

我根据http://support.sas.com/kb/33/017.html

的内容提供了一个人为的例子

SAS使用什么排序标准或系统来确定此代码块末尾的PROC FREQ的顺序?

 proc format lib=work;
    value $productfmt
           "Boot"           = "<"
           "Men's Casual"   = "!"
           "Women's Casual" = "A" 
           "Men's Dress"    = "B" 
           "Women's Dress"  = "5"
           "Sandal"         = "6" 
           "Slipper"        = "7" 
           "Sport Shoe"     = "08" ;    
QUIT;

data work.newshoes;
 set sashelp.shoes; /* the original data set */
     NEWPRODUCT = PRODUCT;

    format NEWPRODUCT $productfmt.;
run;

proc freq data=work.newshoes order=formatted;
    table NEWPRODUCT;
run;

1 个答案:

答案 0 :(得分:1)

与普通的SAS字符排序或比较一样,它正在查看定义字符的基础数字代码。在Windows或Unix上,这是ASCII代码(在其他一些系统上,EBCDIC)。通常,您的数字小于字母,大写小于小写。你可以在标准英文键盘上输入的大多数其他字符都可以在字母之前找到,无论是在数字之前还是之后(比较运算符和其他一些字符在数字之后,打印在数字之上的字符是除了@之前的数字之前,但对我来说似乎是随机的)。有关详细信息,请参阅an ASCII table

您可以使用RANK查看字符串中的第一个ASCII值(如果需要,可以使用SUBSTR结合RANK来获取特定字符的值)。你也可以把它放到$ HEX。看到整个字符串。在这里,我使用RANK向您展示它按照原样排序的原因。

proc format lib=work;
    value $productfmt
           "Boot"           = "<"
           "Men's Casual"   = "!"
           "Women's Casual" = "A" 
           "Men's Dress"    = "B" 
           "Women's Dress"  = "5"
           "Sandal"         = "6" 
           "Slipper"        = "7" 
           "Sport Shoe"     = "08" ;    
QUIT;

data work.newshoes;
 set sashelp.shoes; /* the original data set */
     NEWPRODUCT = PRODUCT;

    format NEWPRODUCT $productfmt.;
    ascii = rank(put(newproduct,$productfmt.));
run;

proc freq data=work.newshoes order=formatted;
    table NEWPRODUCT*ascii/list;
run;