Sorting 如何在sas中按定义的顺序排序,而不是按字母顺序排序?
假设我有一个超市的数据集,包含产品类别、价格、产品名称等。我想按类别排序,但要按定义的顺序排序,而不是按字母顺序排序 例如,如果类别是:罐装、乳制品、肉类、蔬菜,我想按它们可能过期的时间进行分类(我很可能知道这些信息,所以请继续玩下去)。这意味着我想按以下顺序分类:乳制品、肉类、蔬菜、罐装食品 我用这个签名写了一个宏:Sorting 如何在sas中按定义的顺序排序,而不是按字母顺序排序?,sorting,sas,Sorting,Sas,假设我有一个超市的数据集,包含产品类别、价格、产品名称等。我想按类别排序,但要按定义的顺序排序,而不是按字母顺序排序 例如,如果类别是:罐装、乳制品、肉类、蔬菜,我想按它们可能过期的时间进行分类(我很可能知道这些信息,所以请继续玩下去)。这意味着我想按以下顺序分类:乳制品、肉类、蔬菜、罐装食品 我用这个签名写了一个宏: key_sort(ds=, keys='canned, dairy, meat, vegetable', field =category, sort_by=) 这将解析键,
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;
然后,我按字段进行排序。_键
这是最好的方法吗?这能更简洁或有效地完成吗 如果您有一个包含排序的单独数据集,那么您可以利用该数据集并将其作为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;
如果您有一个包含排序的单独数据集,那么您可以利用该数据集并将其作为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;
这听起来是一个合理的方法。基本上,您需要输入一个数值来定义您感兴趣的类别的相对顺序。然后按该数值排序,而不是按类别排序。我想另一个选项是在上合并该数值。@Pureferret我的SAS有点生锈,我没有安装SAS系统来测试。。。安维。。。proc格式是可以的,但我相信proc sort在排序时没有考虑格式化的值。。。因此,实际上,您可以使用格式
作为迷你查找时间,并使用sql和临时变量对格式化值进行排序……或者只使用put(product\u type,$expires.)
在创建数据集的过程中创建订单字段和proc sort
通常情况下……这听起来是一种合理的方法。基本上,您需要输入一个数值来定义您感兴趣的类别的相对顺序。然后按该数值排序,而不是按类别排序。我想另一个选项是在上合并该数值。@Pureferret我的SAS有点生锈,我没有安装SAS系统来测试。。。安维。。。proc格式是可以的,但我相信proc sort在排序时没有考虑格式化的值。。。因此,实际上,您可以使用格式
作为迷你查找时间,并使用sql和临时变量对格式化值进行排序……或者只需在数据集的创建过程中使用put(product\u type,$expires。)
来创建订单字段和proc sort
。。。