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 | |
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?
|