楼主: Tigflanker
7843 6

[问答] 如何将字符型变量按照指定顺序排序 [推广有奖]

  • 8关注
  • 18粉丝

副教授

49%

还不是VIP/贵宾

-

威望
0
论坛币
2321 个
通用积分
9.8528
学术水平
179 点
热心指数
194 点
信用等级
167 点
经验
27443 点
帖子
622
精华
0
在线时间
851 小时
注册时间
2011-3-27
最后登录
2023-5-14

50论坛币
例如,我有如下数据集:

data aaa;
input x $ @@;
cards;
a a s s d d f f d s d a f s d a f s
;
run;

我就想把x按照:a d s f(我自己指定的顺序)排序,请问有无办法,谢谢。

我不想用衍生变量,我希望寻求直接的方法。

最佳答案

ziyenano 查看完整内容

data aaa; input x $ @@; cards; a a s s d d f f d s d a f s d a f s ; run; data tmp; input x $ @@; id=_n_; cards; a d s f ; run; proc sql; create table bbb as select t.x from aaa t inner join tmp t1 on t.x=t1.x order by t1.id; quit; 这个算不算辅助变量?
关键词:字符型变量 字符型 cards Input card 如何
Bye SAS.
若有缘,能重聚。
沙发
ziyenano 发表于 2013-8-13 10:20:02 |只看作者 |坛友微信交流群
data aaa;
input x $ @@;
cards;
a a s s d d f f d s d a f s d a f s
;
run;

data tmp;
input x $ @@;
id=_n_;
cards;
a d s f
;
run;

proc sql;
create table bbb as
select t.x from
aaa t
inner join
tmp t1
on t.x=t1.x
order by t1.id;
quit;

这个算不算辅助变量?

已有 1 人评分学术水平 热心指数 信用等级 收起 理由
Tigflanker + 1 + 1 + 1 独特的方法。

总评分: 学术水平 + 1  热心指数 + 1  信用等级 + 1   查看全部评分

使用道具

藤椅
bobguy 发表于 2013-8-13 10:32:26 |只看作者 |坛友微信交流群
you can define a auxiliary variable as below and sort by that auxiliary variable.

proc format ;
value $myorder
a=1
d=2
s=3
f=4
;
run;

data aaa;
input x $ @@;
xorder=put(x, $myorder.);
cards;
a a s s d d f f d s d a f s d a f s
;
run;

proc sort data=aaa; by xorder; run;

proc print;run;
已有 1 人评分学术水平 热心指数 信用等级 收起 理由
Tigflanker + 1 + 1 + 1 Thank you Bob.

总评分: 学术水平 + 1  热心指数 + 1  信用等级 + 1   查看全部评分

使用道具

板凳
Tigflanker 发表于 2013-8-13 10:52:47 |只看作者 |坛友微信交流群
bobguy 发表于 2013-8-13 10:32
you can define a auxiliary variable as below and sort by that auxiliary variable.

proc format ;
Yes. Auxiliary variable must be the effectively way to deal with the problem. But I only wonder if here exist another directly way, such a proc stop, a option in proc sort, to solve this problem.
Bye SAS.
若有缘,能重聚。

使用道具

报纸
yongyitian 发表于 2013-8-13 12:46:23 |只看作者 |坛友微信交流群
  1. data aaa_sort;
  2.     set  aaa(where = (x='a'))
  3.          aaa(where = (x='d'))
  4.          aaa(where = (x='s'))
  5.          aaa(where = (x='f'));
  6. run;
复制代码
已有 1 人评分学术水平 热心指数 信用等级 收起 理由
Tigflanker + 1 + 1 + 1 观点有启发

总评分: 学术水平 + 1  热心指数 + 1  信用等级 + 1   查看全部评分

使用道具

地板
420948492 发表于 2016-1-6 16:07:59 |只看作者 |坛友微信交流群
{:3_42:}

使用道具

7
sjt1992 发表于 2019-3-12 04:15:55 |只看作者 |坛友微信交流群
yongyitian 发表于 2013-8-13 12:46
Really a good idea!

使用道具

您需要登录后才可以回帖 登录 | 我要注册

本版微信群
加好友,备注cda
拉您进交流群

京ICP备16021002-2号 京B2-20170662号 京公网安备 11010802022788号 论坛法律顾问:王进律师 知识产权保护声明   免责及隐私声明

GMT+8, 2024-4-26 22:18