由买买提看人间百态

boards

本页内容为未名空间相应帖子的节选和存档,一周内的贴子最多显示50字,超过一周显示500字 访问原贴
Statistics版 - 遇到个SAS 问题,求教
相关主题
请教:get next record using BY group (SAS code data manipulation)question about SAS BASE 123 No.64?
求一段SAS codePlease help with a SAS macro
新手求教一个简单的SAS问题Another SAS question
工作中SAS问题 —另一个问题请教![合集] 问个SAS的问题
又来请教了:sas里面咋实现lag?求教proc sql 问题
%do questions请问两道sas adv的题..
请教一下SAS编程的一个问题sas大牛们这个要怎么实现呀
SAS problem ask for help!请教一个简单SAS问题
相关话题的讨论汇总
话题: ld话题: 1001话题: patient话题: change话题: data
进入Statistics版参与讨论
1 (共1页)
a********i
发帖数: 205
1
旧的dataset是
Patient LD
1001 5
1001 45
1001 70
新的dataset是
Patient LD Change
1001 5 40
1001 45 25
1001 70 .
其实change就是下面一个减去上面一个
请教大神们怎么得出change这个variable啊?
h******e
发帖数: 1791
2
lag function.
a********i
发帖数: 205
3

楼上的,不对,我用lag会变成以下的dataset,
Patient LD Change
1001 5 .
1001 45 40
1001 70 25

【在 h******e 的大作中提到】
: lag function.
h******e
发帖数: 1791
4
你先倒着sort一遍不就行了吗?或者你用retain也行。

【在 a********i 的大作中提到】
:
: 楼上的,不对,我用lag会变成以下的dataset,
: Patient LD Change
: 1001 5 .
: 1001 45 40
: 1001 70 25

a********i
发帖数: 205
5
你先倒着sort一遍不就行了吗?或者你用retain也行。

求教用retain怎么用?我也隐约觉得应该是retain但是具体就不知道怎么写

【在 a********i 的大作中提到】
:
: 楼上的,不对,我用lag会变成以下的dataset,
: Patient LD Change
: 1001 5 .
: 1001 45 40
: 1001 70 25

o****o
发帖数: 8077
6
data new;
merge old old(firstobs=2 rename=(LD=LD2));
Change=LD2-LD;
drop LD2;
run;

【在 a********i 的大作中提到】
: 旧的dataset是
: Patient LD
: 1001 5
: 1001 45
: 1001 70
: 新的dataset是
: Patient LD Change
: 1001 5 40
: 1001 45 25
: 1001 70 .

e****t
发帖数: 766
7
还带回声的。

【在 a********i 的大作中提到】
: 你先倒着sort一遍不就行了吗?或者你用retain也行。
:
: 求教用retain怎么用?我也隐约觉得应该是retain但是具体就不知道怎么写

m*****a
发帖数: 658
8
也考虑了多个patient 的情况:
data try;
input patient LD;
datalines;
1001 5
1001 45
1001 70
1002 10
1002 20
1002 35
run;
proc sort data=try;
by patient descending LD;
run;
data try2;
set try;
change=lag(LD)-LD ;
if lag(patient)~=patient then change=".";
run;
proc sort data=try2;
by patient LD;
run;
k*******a
发帖数: 772
9
LZ没说LD是排列好的把,只是刚好给的数据是排列好的。

【在 m*****a 的大作中提到】
: 也考虑了多个patient 的情况:
: data try;
: input patient LD;
: datalines;
: 1001 5
: 1001 45
: 1001 70
: 1002 10
: 1002 20
: 1002 35

m*****a
发帖数: 658
10

There is a patient variable in then data set. And I think, in general, this
kind of calculation makes sense only for the same patient. If not, just
remove the line with if statement.

【在 k*******a 的大作中提到】
: LZ没说LD是排列好的把,只是刚好给的数据是排列好的。
相关主题
%do questionsquestion about SAS BASE 123 No.64?
请教一下SAS编程的一个问题Please help with a SAS macro
SAS problem ask for help!Another SAS question
进入Statistics版参与讨论
m*****a
发帖数: 658
11
oh, sorry, I see what you mean now. LA is supposed to be ordered since LZ
want the current one minus the previous one.
Just let's see what LZ will say.

【在 k*******a 的大作中提到】
: LZ没说LD是排列好的把,只是刚好给的数据是排列好的。
y*****e
发帖数: 777
12
我觉得这个应该就可以实现了啊。

【在 o****o 的大作中提到】
: data new;
: merge old old(firstobs=2 rename=(LD=LD2));
: Change=LD2-LD;
: drop LD2;
: run;

b*****e
发帖数: 223
13
嗯,~= 是什么?

【在 m*****a 的大作中提到】
: 也考虑了多个patient 的情况:
: data try;
: input patient LD;
: datalines;
: 1001 5
: 1001 45
: 1001 70
: 1002 10
: 1002 20
: 1002 35

P****D
发帖数: 11146
14
See this http://www.ats.ucla.edu/stat/sas/faq/tsvars.htm
Use the part with "lead" as in "transformout=(lead 1)"

【在 k*******a 的大作中提到】
: LZ没说LD是排列好的把,只是刚好给的数据是排列好的。
m*****a
发帖数: 658
15
Thanks, PharmD. It is very useful.
data try;
input patient LD;
datalines;
1001 5
1001 45
1001 70
1002 10
1002 35
1002 20
run;
proc expand data=try out=try1 method=none;
convert LD=LD_lead /transformout=(lead 1);
by patient;
run;
data try2 ;
set try1;
change=LD_lead-LD;
keep patient LD change;
run;

【在 P****D 的大作中提到】
: See this http://www.ats.ucla.edu/stat/sas/faq/tsvars.htm
: Use the part with "lead" as in "transformout=(lead 1)"

a********i
发帖数: 205
16
多谢各位大神
总结一下还是这样写最好:
data old;
input patient LD;
datalines;
1001 5
1001 45
1001 70
1002 10
1002 20
1002 35
run;
proc sort data=old;
by patient;
run;
Data new(drop=LD2);
merge old old(firstobs=2 rename=(LD=LD2));
by patient;
change=LD2-LD;
if last.patient then change=.;
run;
d*******o
发帖数: 493
17
这个题本猫当年面试的时候被考无数遍了,就是考dif()function.
BTW, 楼主的最后方法好像不work。
a********i
发帖数: 205
18
这个题本猫当年面试的时候被考无数遍了,就是考dif()function.
BTW, 楼主的最后方法好像不work。
k*******a
发帖数: 772
19
我这个似乎work,不过有点复杂,还是用proc expand最好
data try;
input patient LD;
datalines;
1001 5
1001 45
1001 70
1002 10
1002 35
1002 20
run;
data change;
set try;
by patient;
change=LD-lag(LD);
output;
if last.patient then do;
change=.;
output;
end;
data change;
set change;
by patient;
if first.patient ne 1;
keep change;
data try;
merge try change;
proc print data=try;run;
P****D
发帖数: 11146
20
往回一个或多个都容易,往前比较麻烦。DIF也是只管往回……

【在 d*******o 的大作中提到】
: 这个题本猫当年面试的时候被考无数遍了,就是考dif()function.
: BTW, 楼主的最后方法好像不work。

a********i
发帖数: 205
21

得到安慰了,只能说那家公司变态了,短时间答不上不怪我,哈哈

【在 P****D 的大作中提到】
: 往回一个或多个都容易,往前比较麻烦。DIF也是只管往回……
R*****g
发帖数: 99
22
DATA WANT;
set have;
by patient;
set have(keep=LD fistobs=2 rename=(LD=LD2)) have(obs=1 drop=_all_) ;
dif_raw=LD-LD2;
dif=ifn(last.patient, (.),dif_raw);
keep patient LD dif;
RUN;

【在 a********i 的大作中提到】
:
: 得到安慰了,只能说那家公司变态了,短时间答不上不怪我,哈哈

1 (共1页)
进入Statistics版参与讨论
相关主题
请教一个简单SAS问题又来请教了:sas里面咋实现lag?
请教两个SAS ADV问题%do questions
[合集] SAS里如何实现LOCF(LAST OBS CARRIED FORWARD)?请教一下SAS编程的一个问题
SAS question (紧急求助,在线等)SAS problem ask for help!
请教:get next record using BY group (SAS code data manipulation)question about SAS BASE 123 No.64?
求一段SAS codePlease help with a SAS macro
新手求教一个简单的SAS问题Another SAS question
工作中SAS问题 —另一个问题请教![合集] 问个SAS的问题
相关话题的讨论汇总
话题: ld话题: 1001话题: patient话题: change话题: data