/* 两组之间定量指标比较t检验的统计表格 */ * 定义"ttest"宏,其中3个宏变量&database、&var和&index; * 宏变量&database用来指定数据集,如database=sasuser.pps; * 宏变量&var用来指定要分析的变量,如var=height,var后只能接一个变量; * 宏变量&index用来说明label要分析的变量,如index=体温; %macro ttest(database=,var=, index=); proc sort data=&database.; by group; run; 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; run; * 将描述性结果输出到result数据集中; data a(where=(group="A")) b(where=(group="B")); set result; format mean 6.2 med 6.2 std 6.2; run; * 将两组的描述性结果分别输出到独立的数据集a、b中,并定义mean、med、std的长度; data result(drop=group); merge a(rename=(n=NA nmiss=MA mean=MeanA med=medA std=stdA Q1=QA1 Q3=QA3 min=minA max=maxA)) b(rename=(n=NB nmiss=MB mean=MeanB med=medB std=stdB Q1=QB1 Q3=QB3 min=minB max=maxB)); run; * a、b分别重新对变量更名,再合并到一个数据集中; ods listing close; ods output ttests=ttests equality=equality; proc ttest data=&database.; var &var.; class group; run; ods listing; * 利用ODS将成组t检验结果输出到数据集ttests,方差齐性检验结果输出到数据集equality; data test2; merge ttests equality; by variable; * 合并数据集ttests、equality到数据集test2中; data test21; set test2; where ProbF>0.05 and Variances="Equal"; length stat $5; stat="t"; run; * 生成方差齐性的成组t检验数据集test21,并定义变量格式; data test22; set test2; where ProbF<0.05 and Variances="Unequal"; length stat $5; stat="校正t"; run; * 生成方差非齐性的成组t检验数据集test22,并定义变量格式; data test(keep=tValue Probt stat); merge test21 test22; tValue=abs(tValue); format tValue 6.2 Probt 6.4; run; * 合并成组t检验数据集test21、test22,并定义变量长度; data _null_; merge result test; file "D:\1.txt" mod; put #1 @3 "&index." @70 stat '=' tValue @85 'P=' Probt #2 @5 "例数(缺失)" @22 NA '(' MA ')' @47 NB '(' MB ')' #3 @5 "均数(标准差)" @22 MeanA '(' StdA ')' @47 MeanB '(' StdB ')' #4 @5 "中位数(P25~P75)" @22 MedA '(' QA1 '-' QA3 ')' @47 MedB '(' QB1 '-' QB3 ')' #5 @5 "最小值-最大值" @22 MinA '-' MaxA @47 MinB '-' MaxB; run; * 表格基本框架构建; data _null_; merge result test; file "D:\结论.txt" mod; if Probt>0.05 then do ; put @1 '两组间' "&index." '比较无统计学意义(P>0.05)' ; end; else do ; put @1 '两组间' "&index." '比较有统计学意义(P<0.05)' ; end ; ; run; proc datasets nolist; delete result a b TTests Equality test2 test21 test22 test stt; quit; * 删除临时数据集; %mend ttest;
有道无术,术尚可进;有术无道,止于术也!
浙公网安备 33010602011771号