由买买提看人间百态

boards

本页内容为未名空间相应帖子的节选和存档,一周内的贴子最多显示50字,超过一周显示500字 访问原贴
Statistics版 - [提问]怎样sort这个dataset?
相关主题
sas adv 63题 52nodupkey 删除的observations怎么查看?
SAS dataset 中,怎么把数据往上移一行?question about SAS BASE 123 No.64?
求教一个简单的data step 牛肉包hi, an interview question
SAS 问题求助which route in SAS is faster?
请教一sas programmmbase 70 - Q27
SAS base 87% pass todaysas proc report的问题。
PROC SQL join data help请教关于char转变成numeric的问题
A question in splitting datasetsas读入数据时的一个问题请教
相关话题的讨论汇总
话题: input话题: outcome话题: test话题: data话题: run
进入Statistics版参与讨论
1 (共1页)
s*******2
发帖数: 791
1
我有如下dataset Test
data Test;
input input $ outcome $ @@;
datalines;
A 0 A 0 A 0
A 1 A 1 A 1
A 2 A 2 A 2
B 0 B 0 B 0
B 1 B 1 B 1
B 2 B 2 B 2
;
怎么样可以得到下面的数据 (outcome按照0,1,2的顺序)?谢谢
Obs input outcome
1 A 0
2 A 1
3 A 2
4 A 0
5
g********d
发帖数: 2022
2
by input outcome;
s*******2
发帖数: 791
3
谢谢,不过你那样做出来的outcome是(0 0 0 1 1 1 2 2 2 0 0 0 1 1 1 2 2 2)我想
要得是(0 1 2 0 1 2 0 1 2 0 1 2 0 1 2 0 1 2)请参看我上面的帖子。

【在 g********d 的大作中提到】
: by input outcome;
g********d
发帖数: 2022
4
哦没注意。
这样的话你只能用一个新的变量来标记outcome(0=A,1=B,2=C之类)然后sort这三个变
量。

【在 s*******2 的大作中提到】
: 谢谢,不过你那样做出来的outcome是(0 0 0 1 1 1 2 2 2 0 0 0 1 1 1 2 2 2)我想
: 要得是(0 1 2 0 1 2 0 1 2 0 1 2 0 1 2 0 1 2)请参看我上面的帖子。

n***p
发帖数: 508
5
I do not do well in programming. I have a clusmy way, not sure if this is
what you need.
data Test;
input input $ outcome $ @@;
datalines;
A 0 A 0 A 0
A 1 A 1 A 1
A 2 A 2 A 2
B 0 B 0 B 0
B 1 B 1 B 1
B 2 B 2 B 2
;
run;
proc sort data = test out= test_sorted nodupkeys;
by input outcome;
run;
data a b;
set test_sorted;
if input = 'A' then output a;
else output b;
run;
data aaa;
set a a a;
run;
data bbb;
set b b b;
run;
data combine;
s*******2
发帖数: 791
6
谢谢你。 我运行了你的这个code输出的结果就是我想要的。可是有一个问题。 我给出
的Test刚好是18个observations,所以通过proc sort去掉了duplicate rows, 就剩A 0
A 1 A 2 B 0 B 1 B 2.然后再stack dataset三次得到我想要的结果。可是如果
我给非3的倍数的observations,怎么办?
例如 16个observations:
data Test;
input input $ outcome $ @@;
datalines;
A 0 A 0
A 1 A 1 A 1
A 2 A 2 A 2
B 0 B 0 B 0
B 1 B 1
B 2 B 2 B 2
;
run;
得到的结果应该是
Obs input outcome
1 A 0


【在 n***p 的大作中提到】
: I do not do well in programming. I have a clusmy way, not sure if this is
: what you need.
: data Test;
: input input $ outcome $ @@;
: datalines;
: A 0 A 0 A 0
: A 1 A 1 A 1
: A 2 A 2 A 2
: B 0 B 0 B 0
: B 1 B 1 B 1

s*******2
发帖数: 791
7
在我看来“用一个新的变量来标记outcome(0=A,1=B,2=C之类)”,如果就是“0=A,1=B
,2=C”,那么sort by“这三个变量”和直接sort by test outcome是一样的。我可能
没有理解你的意思,可否展开说一下,或者列出你的code?
谢谢。:)

【在 g********d 的大作中提到】
: 哦没注意。
: 这样的话你只能用一个新的变量来标记outcome(0=A,1=B,2=C之类)然后sort这三个变
: 量。

g********d
发帖数: 2022
8
呵呵,以为又是新手问初级问题,没认真看,抱歉。你很礼貌啊,赞一个。
data Test;
input input $ outcome $ @@;
datalines;
A 0 A 0 A 0
A 1 A 1 A 1
A 2 A 2 A 2
B 0 B 0 B 0
B 1 B 1 B 1
B 2 B 2 B 2
;
run;
proc sort;
by input outcome ;run;
proc print;run;
data test1;
set test;
by input outcome;
retain x 0;
if input="A" and outcome=0 then do;
if first.outcome then x=0;x+1;end;
else if input="A" and outcome=1 then do;
if first.outcome then x=0;x+1;end;
else if input="A" and outcome=2 then do;
if first

【在 s*******2 的大作中提到】
: 在我看来“用一个新的变量来标记outcome(0=A,1=B,2=C之类)”,如果就是“0=A,1=B
: ,2=C”,那么sort by“这三个变量”和直接sort by test outcome是一样的。我可能
: 没有理解你的意思,可否展开说一下,或者列出你的code?
: 谢谢。:)

s*******f
发帖数: 148
9
Try this~ It should work well no matter you have 18 or 16 obs.
DATA temp;
SET test;
BY input outcome;
IF FIRST.outcome THEN n=1;
ELSE n+1;
RUN;
PROC SORT DATA=temp OUT=sorted(DROP=n);
BY input n outcome;
RUN;

【在 s*******2 的大作中提到】
: 我有如下dataset Test
: data Test;
: input input $ outcome $ @@;
: datalines;
: A 0 A 0 A 0
: A 1 A 1 A 1
: A 2 A 2 A 2
: B 0 B 0 B 0
: B 1 B 1 B 1
: B 2 B 2 B 2

s*******2
发帖数: 791
10
谢谢 gosummerod 和 sherryyyf
看来我的first.和last. retain掌握的还是不够好。
我原来想写下面的code (uncomplete),但是要将data step (sequent test_sorted)
运行3遍,再append一起,然后sort by input counter.但是现在看来达不到我预想的结
果。首先,counter的值不是从0-15而是0-6;其次,如果我运行>=3次,最后id=5,8,16
的row是没有办法creat到我的test_New中的。
虽然上面的各位已经帮我解决了这个问题,但是还是很纠结我自己的code,谁能帮我看
看哪里错了?帮忙改一下吧。谢谢了。
proc datasets library=work;
delete sequent test_sorted test_New;
run;
data Test;
input input $ outcome @@;
datalines;
A 0 A 0
B 0 B 0 B 0
A 1 A 1 A 1
A 2 A
p*****0
发帖数: 3104
11
做成3个小dataset,
然后vertical combine
然后sort by input
how do you think?

【在 s*******2 的大作中提到】
: 我有如下dataset Test
: data Test;
: input input $ outcome $ @@;
: datalines;
: A 0 A 0 A 0
: A 1 A 1 A 1
: A 2 A 2 A 2
: B 0 B 0 B 0
: B 1 B 1 B 1
: B 2 B 2 B 2

b*********e
发帖数: 29
12
data Test;
input input $ outcome $ @@;
datalines;
A 0 A 0 A 0
A 1 A 1 A 1
A 2 A 2 A 2
B 0 B 0 B 0
B 1 B 1 B 1
B 2 B 2 B 2
;
run;
proc sort data=test;
by input outcome;
run;
data test2; set test;
input class @@;
cards;
1 2 3 1 2 3
1 2 3 1 2 3
1 2 3 1 2 3
;
run;
proc sort data = test2;
by input class;
run;
我忘了如何把一个dataset中的三个变量中的两个存到另外一个dataset中了。
可以考虑用sql.
s*******2
发帖数: 791
13
谢谢。可是如果这是一个有很多observation的dataset,这个方法就不实际了。

【在 b*********e 的大作中提到】
: data Test;
: input input $ outcome $ @@;
: datalines;
: A 0 A 0 A 0
: A 1 A 1 A 1
: A 2 A 2 A 2
: B 0 B 0 B 0
: B 1 B 1 B 1
: B 2 B 2 B 2
: ;

s*******2
发帖数: 791
14
我也是这么想的。可是我用我上面提供的code实现不了。希望大家有空的话帮我看看。

【在 p*****0 的大作中提到】
: 做成3个小dataset,
: 然后vertical combine
: 然后sort by input
: how do you think?

1 (共1页)
进入Statistics版参与讨论
相关主题
sas读入数据时的一个问题请教请教一sas programmm
一个简单的SAS 问题SAS base 87% pass today
请问一个SAS proc sql的写法PROC SQL join data help
a simple question. Thank you in advanceA question in splitting dataset
sas adv 63题 52nodupkey 删除的observations怎么查看?
SAS dataset 中,怎么把数据往上移一行?question about SAS BASE 123 No.64?
求教一个简单的data step 牛肉包hi, an interview question
SAS 问题求助which route in SAS is faster?
相关话题的讨论汇总
话题: input话题: outcome话题: test话题: data话题: run