如何按sas中定义的顺序排序,而不是按字母顺序排序?

时间:2014-01-18 10:12:48

标签: sorting sas

假设我有超市的数据集,包含产品类别,价格产品名称等。我想按类别排序,但是按照定义的顺序排序,而不是按字母顺序排序。

例如,如果类别是:罐头,乳制品,肉类,蔬菜,我想在它们可能到期时排序(我很可能我们有这些信息,所以请一起玩)。这意味着我想按此顺序排序:乳制品,肉类,蔬菜,罐头。

我用这个签名写了一个宏:

key_sort(ds=, keys='canned, dairy, meat,  vegetable', field =category, sort_by=) 

这解析了密钥以便可以放入宏循环,然后我用那么多的循环写出一个select语句,如下所示:

Select(&field. ) ;
    %do i=1 %to &number_of_keys. ;
    %let current_key= %scan(&keys., &I., &delim.) ;
    When(&current_key. ) &field._key=&i. ;
    %end;
End;

然后按&field._key选择 这是最好的方法吗?这可以更简洁或有效地完成吗?

1 个答案:

答案 0 :(得分:4)

如果您有一个包含排序的单独数据集,那么您可以利用它并将其作为输入提供PROC格式,或者尽可能简单地应用只有几位的数据集。

proc format; 
    value $EXPIRES 
        'canned'= 4
        'dairy' = 1
        'meat' = 2
        'vegetable' = 3
        other = 5
        ;
run; 

proc sql;
    CREATE TABLE output_set AS 
    SELECT * FROM foods ORDER BY put(produce_type, $expires.); 
quit;