SAS中文论坛
标题:
新药统计中定量指标的SAS宏程序
[打印本页]
作者:
shiyiming
时间:
2007-8-29 11:57
标题:
新药统计中定量指标的SAS宏程序
%macro ttest(database=,var=,index=);
/*利用univariate程序输出描述性结果到result数据集*/
proc univariate noprint data=&database.;
var &var.;
by group;
output out=result n=n mean=mean median=med std=std min=min max=max nmiss=nmiss
Q1=Q1 Q3=Q3;
/*将两对比组描述性结果分别输出到独立的数据集中,并定义变量的长度*/
data aa(where=(group="A")) bb(where=(group="B"));
set result;
format mean 6.2 med 6.2 std 6.2;
/*两个独立的数据集分别重新更名变量名,再合并到一个数据集中*/
data result(drop=group);
merge aa(rename=(n=NA nmiss=MA mean=MeanA med=medA std=StdA Q1=QA1 Q3=QA3 Min=MinA Max=MaxA))
bb(rename=(n=NB nmiss=MB mean=MeanB med=medB std=StdB Q1=QB1 Q3=QB3 Min=MinB Max=MaxB));
/*利用ODS输出成组T检验的结果到数据集TTests,方差齐性检验的结果到数据集Equality*/
ods listing close;
ods output TTests=TTests Equality=Equality;
proc ttest data=&database.;
var &var.;
class group;
run;
ods listing;
/*合并数据集ttests、Eauality到一个数据集中*/
data test2;
merge ttests Equality;
by Variable;
/*生成方差齐性的成组T检验的数据集,并定义变量格式*/
data test21;set test2; where ProbF>0.05 and Variances="Equal";length stat $5;stat="t";
/*生成方差不齐的成组T检验的数据集,并定义变量格式*/
data test22; set test2; where ProbF<0.05 and Variances="Unequal";length stat $5;stat="校正t";
/*合并成组T检验的数据集,并定义变量的长度*/
data test(keep=tValue Probt stat);
merge test21 test22;
tValue=abs(tValue);
format tValue 6.2 Probt 6.4;
/* 生成打印结果的数据集*/
/*合并描述性结果和成组T检验的数据集,生成打印的数据集,并定义打印输出格式*/
data _null_;
merge result test;
file print n=ps notitle;
put #1 @2 "&index." @61 stat '=' tValue @72 'P='Probt
#2 @4 "例数(缺失)" @20 NA'('MA')' @39 NB'('MB')'
#3 @4 "均数(标准差)" @20 MeanA'('StdA')' @39 MeanB'('StdB')'
#4 @4 "中位数(P25-P27)" @20 MedA'('QA1'-'QA3')' @39 MedB'('QB1'-'QB3')'
#5 @4 "最小值-最大值" @20 MinA'-'MaxA @39 MinB'-'MaxB;
run;
/*删除程序中生成的临时数据集,并定义打印表格的表头和表格线*/
proc datasets; delete result aa bb TTests Equality test2 test21 test22 test stt;quit;
%mend ttest;
%macro ctitl(titl=);
data _null_;
file print n=ps notitles;
put #1 @5 "&titl"
#2 @2 80*'_'
#3 @2 '指标项' @21 'A组' @40 'B组' @60 '统计量' @72 'P值'
#4 @2 80*'_';
run;
%mend ctitl;
%macro cleg;
data _null_;
file print n=ps notitles;
put #1 @2 80*'_';
run;
%mend cleg;
DATA pps;
INPUT group$ Temp Pulse;
cards;
A 36.1 78
A 36.2 79
A 36.4 81
A 36.6 83
A 36.8 85
A 37 87
A 37.2 89
A 37.3 90
A 37.4 91
A 37.5 92
A 37.1 97
A 37.7 100
A 38.1 102
A 38.5 104
A 38.7 105
B 36.3 80
B 36.5 82
B 36.7 84
B 36.9 86
B 37.1 88
B 36.3 93
B 36.5 94
B 36.7 95
B 36.9 96
B 37.3 98
B 37.5 99
B 37.9 101
B 38.3 103
B 38.9 106
;
run;
%ctitl(titl=表1:两组治疗前临床一般资料报告);
%ttest(database=pps,var=Temp,index=体温/摄氏度);
%ttest(database=pps,var=Pulse,index=心率/次.min);
%cleg;
这个程序有个缺点是每条横线上都有一个空行,不知道这么删除。还有横线打印出来后,是一些点。请大家讨论指正
作者:
shiyiming
时间:
2007-8-29 19:06
标题:
Re: 新药统计中定量指标的SAS宏程序
请collon版主帮忙看下,谢谢
作者:
shiyiming
时间:
2007-8-30 10:05
标题:
Re: 新药统计中定量指标的SAS宏程序
请高人指点!
作者:
shiyiming
时间:
2007-8-30 21:40
标题:
Re: 新药统计中定量指标的SAS宏程序
直接输出到文件:
[code:16e3e]file "D:\1.txt" mod;[/code:16e3e]
另外这种方法已经过时了,没有太大意思.
作者:
shiyiming
时间:
2007-8-31 08:55
标题:
Re: 新药统计中定量指标的SAS宏程序
那collon版主能否针对这样简单的例子,提供一个不过时的办法呢?希望有详细的过程!
谢谢!谢谢!
作者:
shiyiming
时间:
2007-8-31 08:59
标题:
Re: 新药统计中定量指标的SAS宏程序
对不起,应该是collen版主。请见谅
作者:
shiyiming
时间:
2007-8-31 22:18
标题:
Re: 新药统计中定量指标的SAS宏程序
自己试试利用tabulate/report,或者EG开发适合自己的.
另外,思特统计做什么的?有无介绍?
作者:
shiyiming
时间:
2007-9-1 10:44
标题:
Re: 新药统计中定量指标的SAS宏程序
collen版主,我觉得这个问题对你来说应该是小菜吧!您是否可以给在下这帮战友们演示一下。我是学卫生统计的,不是数学出生的,平时习惯用SPSS,SAS那块不是我的强项,所以正在努力学习,还望您多指点啊。至于“思特统计”主要是做临床科研的一些简单数据处理,新药统计对我来说吸引力挺大的,但是用SPSS做太费时了,所以想试着用SAS做几个小的宏,这样会方便一些。我知道一般大的CRO公司都有自己的宏库吧,但这些都是商业秘密,没办法得到这些资料。呵呵,毕业后有机会还是很想到这样的公司去发展下的。
作者:
shiyiming
时间:
2007-9-1 22:28
标题:
Re: 新药统计中定量指标的SAS宏程序
实际上你看明白了本板块的几个程序就很容易开发出适合自己用的啦
基础篇:定量/定性指标程序
扩展篇:宏程序的扩展
高级篇:宏的存储利用和宏库的组织
既然是商业秘密,那么对我来讲也是秘密啊,呵呵
作者:
shiyiming
时间:
2007-9-2 10:16
标题:
Re: 新药统计中定量指标的SAS宏程序
[color=#FF8040:9ccda]国内目前尚没有如此专门的板块,由于板块过于专一,我们呼吁大家在不涉及到商业利益的前提下,高手或者说专业人才来这里和大家分享经验或技术。[/color:9ccda]
这是您说的一句话,看来不简单的几句SAS程序,已经设计到您的商业利益了。嗨,明白!明白!那只能自己研究了。
作者:
shiyiming
时间:
2007-9-2 15:59
标题:
Re: 新药统计中定量指标的SAS宏程序
你没有这么无聊吧,看看本板块已经贴了多少程序出来.
作者:
shiyiming
时间:
2007-9-2 17:41
标题:
Re: 新药统计中定量指标的SAS宏程序
我没说本版没贴出不少的程序啊?怎么扯到那里去了?能看到这样的版块我很高兴的啊!不过您作为版主总该有点魄力吧!我知道在国外这些资料早已经不是密码了。我看过一个网站,里面关于这方面的资料都是公开的,只是那个库太大,我暂时没有去找我要的东西就发现这个中文论坛了,本来以为我的那个问题可对于你们这些高手是小CASE,可以在这里得到解决的,那collen版主已经说了这对于你是个秘密,我也就不强求什么了!不过还是希望能把这个版块办的越办越好!顺便送个宏给大家
%macro verify(text,ref);
%local pos error;
%let error=0;
%if not %length(&text) %then %do;
%put ERROR: (verify) No text string supplied for verify to act on.;
%let error=1;
%end;
%if not %length(&ref) %then %do;
%put ERROR: (verify) No reference string supplied for verify to use.;
%let error=1;
%end;
%if &error %then %goto error;
%do pos=1 %to %length(&text);
%if NOT %index(&ref,%qsubstr(&text,&pos,1)) %then %goto gotit;
%end;
%gotit:
%if &pos GT %length(&text) %then 0;
%else &pos;
%goto skip;
%error: %put ERROR: (verify) Leaving verify macro due to error(s) listed.;
%skip:
%mend;
Purpose : Function-style macro to return the position of the first character in a string that does not match any character in a reference string.
欢迎光临 SAS中文论坛 (https://mysas.net/forum/)
Powered by Discuz! X3.2