假设我有超市的数据集,包含产品类别,价格产品名称等。我想按类别排序,但是按照定义的顺序排序,而不是按字母顺序排序。
例如,如果类别是:罐头,乳制品,肉类,蔬菜,我想在它们可能到期时排序(我很可能我们有这些信息,所以请一起玩)。这意味着我想按此顺序排序:乳制品,肉类,蔬菜,罐头。
我用这个签名写了一个宏:
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(¤t_key. ) &field._key=&i. ;
%end;
End;
然后按&field._key
选择
这是最好的方法吗?这可以更简洁或有效地完成吗?
答案 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;