由买买提看人间百态

boards

本页内容为未名空间相应帖子的节选和存档,一周内的贴子最多显示50字,超过一周显示500字 访问原贴
Statistics版 - sas新手请教一个问题
相关主题
工作中SAS问题 —另一个问题请教!ask SAS code
新手问个简单的sas问题关于recode data的问题,多谢。
overall mean in sas for several variablesSAS code 问题
sas helpsas adv 63题 52
sas questionhelp:data manipulation
请教flag问题how to trasform data.
sas date variable exchangeSAS questoin
SAS helpsas base (70) problem 59 help
相关话题的讨论汇总
话题: person话题: 1991话题: 1993话题: 1992话题: 1994
进入Statistics版参与讨论
1 (共1页)
s******o
发帖数: 656
1
各位帮忙看看,多谢多谢!
下边的例子是从我的数据里摘出来的一部分,有四个vairiables:person,year,还有
x和y。
其中x有两个值0和1,y有两个值0和-1,并且x是1的时候y不可能是-1只能是0,y是-1的
时候x不会是1.
Data one;
Input person year x y;
datalines;
1 1990 0 0
1 1991 1 0
1 1992 0 0
1 1993 1 0
1 1994 0 0
1 1995 1 0
1 1996 0 -1
1 1997 1 0
1 1998 0 -1
1 1999 0 -1
2 1991 1 0
2 1992 0 0
2 1993 0 0
2 1994 1 0
2 1995 1 0
2 1996 0 -1
2 1997 1 0
2 1998 0 -1
2 1999 0 -1
;
Run;
我想要做的是:新建一个variable:z,设置为0,整个data按person按year排序后,对
每一个person从早的年份(year)往下看,**如果x出现两次1而且两次1的中间y不能出
现-1,则从第一次出现1那一年开始往后,z设置为1,直到y出现-1。然后再重复**后边
的步骤。
s******o
发帖数: 656
2
结果应该是下边这个样子
per year x y z;
1 1990 0 0 0
1 1991 1 0 1
1 1992 0 0 1
1 1993 1 0 1
1 1994 0 0 1
1 1995 1 0 1
1 1996 0 -1 0
1 1997 1 0 0
1 1998 0 -1 0
1 1999 0 -1 0
2 1991 1 0 1
2 1992 0 0 1
2 1993 0 0 1
2 1994 1 0 1
2 1995 1 0 1
2 1996 0 -1 0
2 1997 1 0 0
2 1998 0 -1 0
2 1999 0 -1 0
;


【在 s******o 的大作中提到】
: 各位帮忙看看,多谢多谢!
: 下边的例子是从我的数据里摘出来的一部分,有四个vairiables:person,year,还有
: x和y。
: 其中x有两个值0和1,y有两个值0和-1,并且x是1的时候y不可能是-1只能是0,y是-1的
: 时候x不会是1.
: Data one;
: Input person year x y;
: datalines;
: 1 1990 0 0
: 1 1991 1 0

j******o
发帖数: 127
3
data two;
set one;
by person;
if first.person then do; z=0; n=0; end;
retain z n;
if x=1 then z=1;
if y=-1 then do; z=0; n=1; end;
if n=1 then z=0;
drop n;
run;
s******o
发帖数: 656
4
这个code对每个person里至少有两个x是1的情况适用,但是如果有一个person只有一个
x是1,那么这个person对应的z就都是0,这个code给出的结果是z都是1比方说
Data one;
Input person year x y;
datalines;
1 1990 0 0
1 1991 1 0
1 1992 0 0
1 1993 1 0
1 1994 0 0
1 1995 1 0
1 1996 0 -1
1 1997 1 0
1 1998 0 -1
1 1999 0 -1
2 1991 1 0
2 1992 0 0
2 1993 0 0
2 1994 1 0
2 1995 1 0
2 1996 0 -1
2 1997 1 0
2 1998 0 -1
2 1999 0 -1
3 1991 1 0
3 1992 0 0
3 1993 0 0
3 1994 0 0
3 1995 0 0
3 1996 0 0
3 1997 0 0
3 1998 0 0
3 1999 0 0
;
Run;
data two;
set one;
by person;
if first.person then do; z=0; n=0; end;
retain z n;
if x=1 then z=1;
if y=-1 then do; z=0; n=1; end;
if n=1 then z=0;
run;
结果是
person year x y z n
1 1990 0 0 0 0
1 1991 1 0 1 0
1 1992 0 0 1 0
1 1993 1 0 1 0
1 1994 0 0 1 0
1 1995 1 0 1 0
1 1996 0 -1 0 1
1 1997 1 0 0 1
1 1998 0 -1 0 1
1 1999 0 -1 0 1
2 1991 1 0 1 0
2 1992 0 0 1 0
2 1993 0 0 1 0
2 1994 1 0 1 0
2 1995 1 0 1 0
2 1996 0 -1 0 1
2 1997 1 0 0 1
2 1998 0 -1 0 1
2 1999 0 -1 0 1
3 1991 1 0 1 0
3 1992 0 0 1 0
3 1993 0 0 1 0
3 1994 0 0 1 0
3 1995 0 0 1 0
3 1996 0 0 1 0
3 1997 0 0 1 0
3 1998 0 0 1 0
3 1999 0 0 1 0
但是想要的结果是对于person 3,z全是0,因为只有一个x的值是1
不过还是多谢,包子奉上请查收

【在 j******o 的大作中提到】
: data two;
: set one;
: by person;
: if first.person then do; z=0; n=0; end;
: retain z n;
: if x=1 then z=1;
: if y=-1 then do; z=0; n=1; end;
: if n=1 then z=0;
: drop n;
: run;

1 (共1页)
进入Statistics版参与讨论
相关主题
sas base (70) problem 59 helpsas question
请教sas code问题请教flag问题
急问一个SAS 的常见问题sas date variable exchange
一个关于macro的问题,多谢。SAS help
工作中SAS问题 —另一个问题请教!ask SAS code
新手问个简单的sas问题关于recode data的问题,多谢。
overall mean in sas for several variablesSAS code 问题
sas helpsas adv 63题 52
相关话题的讨论汇总
话题: person话题: 1991话题: 1993话题: 1992话题: 1994