由买买提看人间百态

boards

本页内容为未名空间相应帖子的节选和存档,一周内的贴子最多显示50字,超过一周显示500字 访问原贴
Statistics版 - 请教一个sas求和的问题
相关主题
神奇的proc meansSAS里缺失observation补全的问题
求助:一个SAS小程序请问一个SAS proc sql的写法
sas问题怎样储存我想要的proc means 的结果?
SAS helpproc sql: find 4 highest and mean, median
proc univariate中如何使用where语句请教一个用SAS作DATA MERGE的问题
请教这种freq 该用什么code算(sas)?Thanks!interview questions about data management
sas proc report的问题。如何判断一个dataset是不是空的?
SAS code helphow to trasform data.
相关话题的讨论汇总
话题: id3话题: id1话题: id2话题: sequence话题: proc
进入Statistics版参与讨论
1 (共1页)
w*****m
发帖数: 414
1
data是这样的:
year id sequence x
2000 id1 1 ..
2001 id1 2 ..
2002 id1 3 ..
2005 id1 1 ..
2006 id1 2 ..
2001 id2 1 ..
2002 id2 2 ..
2004 id2 1 ..
2007 id2 1 ..
2009 id2 1 ..
2000 id3 1 ..
2001 id3 2 ..
2002 id3 3 ..
2003 id3 4 ..
2004 id3 5 ..
2008 id3 1 ..
sequence 表示一个事件对于同一个对象在几年内连续发生。如果中间停了,则
sequence重新开始
计数。
问题:
对每一个对象的每一个sequence, 求x的和? 如果和可以做其他统计,比如mean median std
就更好了。
多谢大神指点。这个问题头疼好几天了。
k*******a
发帖数: 772
2
你可以新建一个变量,把他们group起来
data a;
input year id $ sequence x;
datalines;
2000 id1 1 1
2001 id1 2 2
2002 id1 3 2
2005 id1 1 2
2006 id1 2 3
2001 id2 1 6
2002 id2 2 7
2004 id2 1 1
2007 id2 1 2
2009 id2 1 8
2000 id3 1 9
2001 id3 2 1
2002 id3 3 2
2003 id3 4 3
2004 id3 5 4
2008 id3 1 6
;
data a;
set a;
by id;
if first.id then group=0;
if sequence=1 then group+1;
proc print data=a;run;
proc means data=a sum mean median std;
class id group;
var x;run;
a********i
发帖数: 205
3
data sum;
input year id $ sequence x;
datalines;
2000 id1 1 35
2001 id1 2 60
2002 id1 3 80
2005 id1 1 76
2006 id1 2 95
2001 id2 1 108
2002 id2 2 87
2004 id2 1 76
2007 id2 1 84
2009 id2 1 98
2000 id3 1 123
2001 id3 2 198
2002 id3 3 82
2003 id3 4 90
2004 id3 5 23
2008 id3 1 90
;
run;
proc sort data=sum;
by id sequence;
run;
proc univariate data=sum noprint;
class id sequence;
var x;
output out=report sum=sum mean=mean median=median std=std;
run;
这样好像能做出来,不过我想用proc report做下,各位大神继续指教
h*****d
发帖数: 295
4
kiaklanda的生成group indicator的方法挺好的,但是LZ这种写法应该有问题。
基于kirklanda的proc report可以试试
proc report data=a nowd;
column id group (n mean median std),x;
define id/group;
define group/group;
define x/n mean std;
run;
当然你还可以加上些你需要的format。

【在 a********i 的大作中提到】
: data sum;
: input year id $ sequence x;
: datalines;
: 2000 id1 1 35
: 2001 id1 2 60
: 2002 id1 3 80
: 2005 id1 1 76
: 2006 id1 2 95
: 2001 id2 1 108
: 2002 id2 2 87

w*****m
发帖数: 414
5
非常感谢 kirklanda,你的算法没有问题,完全解决了我的问题。
我以前是不知道怎么用 first.id then group=0 这一句命令。
另外讨论一个小问题,我需要把proc means的结果输出在另一个data set 里,所以我把
你的命令
改成
proc means data=a noprint;
by id group;
var x;
output
out=outdata
mean=x
median=x_m
std=x_std
sum=x_sum;
run;
结果没有问题,可奇怪的是,当我在你的原程序中直接加 noprint的时候,sas报语法
错;我把它
用output命令些出来,结果出错,我然后把class 改为 by,运行就没问题了。
没有大的变化,只是很奇怪SAS为什么这样?另给其他留个借鉴,希望有所帮助。

data a;
set a;
by id;
if first.id then group=0;
if sequence=1 then group+1;
proc print data=a;run;
proc means data=a sum mean median std;
class id group;
var x;run;

【在 k*******a 的大作中提到】
: 你可以新建一个变量,把他们group起来
: data a;
: input year id $ sequence x;
: datalines;
: 2000 id1 1 1
: 2001 id1 2 2
: 2002 id1 3 2
: 2005 id1 1 2
: 2006 id1 2 3
: 2001 id2 1 6

w*****m
发帖数: 414
6
丸子的这个算法有个小问题。如果你看我的原始数据描述就会发现,每一个id中的
sequence有时候
是重复的。比如说,对于同一个id,事件在2000年发生一次,sequence=1, 2001没有发
生,跳
过,2002年发生一次,sequence=1, 2003年没发生,再跳过;2004年又发生一次,
sequence
还是=1,2005年没有发生,再次跳过。
对于这个id,sequence=1出现三次。丸子直接做
proc univariate data=sum noprint;
class id sequence;
就有问题了。

proc sort data=sum;
by id sequence;
run;
proc univariate data=sum noprint;
class id sequence;
var x;
output out=report sum=sum mean=mean median=median std=std;
run;

【在 a********i 的大作中提到】
: data sum;
: input year id $ sequence x;
: datalines;
: 2000 id1 1 35
: 2001 id1 2 60
: 2002 id1 3 80
: 2005 id1 1 76
: 2006 id1 2 95
: 2001 id2 1 108
: 2002 id2 2 87

w*****m
发帖数: 414
7
多谢haywood参与讨论。
不过我真没看懂你的code, 也可能是因为我没用过proc report的原因。
你的code是不是基于kirklanda的group基础上的啊?

【在 h*****d 的大作中提到】
: kiaklanda的生成group indicator的方法挺好的,但是LZ这种写法应该有问题。
: 基于kirklanda的proc report可以试试
: proc report data=a nowd;
: column id group (n mean median std),x;
: define id/group;
: define group/group;
: define x/n mean std;
: run;
: 当然你还可以加上些你需要的format。

h*****d
发帖数: 295
8
是啊,用我写的proc report可以替代kirklanda的proc means那一段。我看到你说想用
proc
report。否则他的work的很好了。

【在 w*****m 的大作中提到】
: 多谢haywood参与讨论。
: 不过我真没看懂你的code, 也可能是因为我没用过proc report的原因。
: 你的code是不是基于kirklanda的group基础上的啊?

w*****m
发帖数: 414
9
我还真没用过proc report,下次有机会试一试。
不知道这个和proc means有什么特别不一样的地方???

【在 h*****d 的大作中提到】
: 是啊,用我写的proc report可以替代kirklanda的proc means那一段。我看到你说想用
: proc
: report。否则他的work的很好了。

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

不是LZ说的是我说的= =~~
最近在搞proc report所以就顺便问问你们~~~
其实用proc means就很方便了

【在 h*****d 的大作中提到】
: 是啊,用我写的proc report可以替代kirklanda的proc means那一段。我看到你说想用
: proc
: report。否则他的work的很好了。

1 (共1页)
进入Statistics版参与讨论
相关主题
how to trasform data.proc univariate中如何使用where语句
SAS code 问题请教这种freq 该用什么code算(sas)?Thanks!
sas adv 63题 52sas proc report的问题。
help:data manipulationSAS code help
神奇的proc meansSAS里缺失observation补全的问题
求助:一个SAS小程序请问一个SAS proc sql的写法
sas问题怎样储存我想要的proc means 的结果?
SAS helpproc sql: find 4 highest and mean, median
相关话题的讨论汇总
话题: id3话题: id1话题: id2话题: sequence话题: proc