楼主: cathy911213
1384 2

求助-我这段程序要怎么改才能出来我想要的结果 [推广有奖]

  • 2关注
  • 2粉丝

高中生

7%

还不是VIP/贵宾

-

威望
0
论坛币
0 个
通用积分
0
学术水平
0 点
热心指数
0 点
信用等级
0 点
经验
131 点
帖子
13
精华
0
在线时间
17 小时
注册时间
2014-9-16
最后登录
2015-9-24

楼主
cathy911213 发表于 2014-9-16 16:52:20 |AI写论文

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

求职就业群
赵安豆老师微信:zhaoandou666

经管之家联合CDA

送您一个全额奖学金名额~ !

感谢您参与论坛问题回答

经管之家送您两个论坛币!

+2 论坛币
程序:
DATA anova1;  
      INPUT z x @@;
   CARDS;
1 128.1 1 134.1 1 133.1 1 138.9 1 140.8 1 127.4
2 150.3 2 147.9 2 136.8 2 126.0 2 150.7 2 155.8

;
run;
proc sort;by z;
proc print data=anova1; run;
PROC univariate normal;
          var x;
          by z;
run;
proc anova;
class z;
model x=z;
means z/duncan hovtest=bartlett;
run;
%macro jiliang (database,var,index);
/*将univariate normal过程步的描述性统计结果和正态性检验的结果输出到到result数据集中*/
proc univariate normal noprint data=&database;
var  &var;  by group;
output out=result  n=n mean=mean median=med std=std min=min max=max nmiss=nmiss  PROBN=Pnor;
/*将A、B两组描述性统计和正态性检验的结果分别输出到a,b两个独立的数据集中,并定义变量的长度*/
data a(where=(group="A"))b(where=(group="B"));
set result;
format mean 6.2 med 6.2 std 6.2  Pnor 18.2;
/*将a,b两个独立的数据集,根据不同的组别将结果重新命名,合并为一个result数据集中*/
data result(drop=group);/**/
merge a(rename=(n=NA nmiss=MA mean=MeanA med=medA std=StdA  Min=MinA Max=MaxA Pnor=PnorA))
b(rename=(n=NB nmiss=MB mean=MeanB med=medB std=StdB  Min=MinB Max=MaxB Pnor=PnorB));
Variable="&var";
/*利用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、Equality和result到一个数据集中test1*/
data test;
merge   Equality TTests result;
by Variable;
/*生成正态且方差齐性的成组T检验的数据集,并定义变量格式*/
data test1;
set test;
where PnorA>0.05 and PnorB>0.05 and ProbF>0.05 and Variances="Equal";
length stat $ 15;
stat="t_value";
/*生成正态但方差不齐的成组T检验的数据集,并定义变量格式*/
data test2;
set test1;
where  ProbF<0.05 and Variances="Unequal";
length stat $ 15;
stat=" t' ";
/*合并成组T检验的数据集,并定义变量的长度*/
data test(keep=tValue Probt stat);
merge test1 test2;
tValue=abs(tValue);
format tValue 6.2 Probt 6.3;
put #1 @3 "&index"
#2 @5 "例数(缺失)" @22 NA'(' MA')' @42 NB'(' MB')'
@60 stat '=' tValue @80 'P=' Probt
#3 @5 "均数±标准差" @22 MeanA'±' StdA @42 MeanB'±' StdB
#4 @5 "中位数" @22 MedA @42 MedB
#5 @5 "最大值" @22 MaxA @42 MaxB
#6 @5 "最小值" @22 MinA @42 MinB;
end;
%mend jiliang;
%jiliang (anova1,z,tizhong);





我想要这种格式的结果:

心率

    例数(缺失)     103 (0 )            106 (0 )          t_value =0.23       P=0.816

    均数±标准差     79.64 ±11.25       80.01 ±11.65

    中位数           80.00               80.00

    最大值           120                 110


    最小值           53                  50


二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

关键词:Univariate variances equality database Variable database normal result 程序 统计

沙发
苹果叶 在职认证  发表于 2014-9-18 00:07:48
建议写code,每个step 都加一个run , 每个分号一行, 两段code 之间空一行,不然好难看。

  1. DATA anova1;  
  2.    INPUT z x @@;
  3.    CARDS;
  4.     1 128.1 1 134.1 1 133.1 1 138.9 1 140.8 1 127.4
  5.     2 150.3 2 147.9 2 136.8 2 126.0 2 150.7 2 155.8
  6.    ;
  7. run;
  8. proc sort;
  9.     by z;
  10. run;

  11. /*proc print data=anova1; run;*/
  12. PROC univariate normal noprint;
  13.    var x;
  14.    by z;
  15. run;
  16. proc anova noprint;
  17.     class z;
  18.     model x=z;
  19.     means z/duncan hovtest=bartlett;
  20. run;
  21. %macro jiliang (database,var,index);

  22. /*将univariate normal过程步的描述性统计结果和正态性检验的结果输出到到result数据集中*/
  23. proc univariate normal noprint data=&database;
  24.     var  &var;
  25.     by z;
  26.     output out=result  n=n mean=mean median=med std=std min=min max=max nmiss=nmiss  PROBN=Pnor;
  27. run;

  28. /*将A、B两组描述性统计和正态性检验的结果分别输出到a,b两个独立的数据集中,并定义变量的长度*/
  29. data a(where=(z=1)) b(where=(z=2));
  30. set result;
  31. format mean 6.2 med 6.2 std 6.2  Pnor 18.2;
  32. run;

  33. /*将a,b两个独立的数据集,根据不同的组别将结果重新命名,合并为一个result数据集中*/
  34. data result(drop=z);/**/
  35.     merge a(rename=(n=NA nmiss=MA mean=MeanA med=medA std=StdA  Min=MinA Max=MaxA Pnor=PnorA))
  36.           b(rename=(n=NB nmiss=MB mean=MeanB med=medB std=StdB  Min=MinB Max=MaxB Pnor=PnorB));
  37.     Variable="&var";
  38. run;

  39. /*利用ODS输出t检验结果数据集Ttests和正态性检验结果数据集Equality */
  40. ods listing close;
  41. ods output  TTests=TTests  Equality=Equality ;
  42. proc ttest data=&database;
  43.     var &var;
  44.     class z;
  45.     run;
  46. ods listing;

  47. /*合并数据集Ttests、Equality和result到一个数据集中test1*/
  48. data test;
  49.     length method $20;
  50.     merge   Equality TTests result;
  51.     by Variable;
  52. run;

  53. /*生成正态且方差齐性的成组T检验的数据集,并定义变量格式*/
  54. data test1;
  55.   set test;
  56.   where PnorA>0.05 and PnorB>0.05 and ProbF>0.05 and Variances="Equal";
  57.   length stat $15;stat="tvalue";
  58. run;
  59. data test2;
  60.   set test1;
  61.   where  ProbF<0.05 and Variances="Unequal";
  62.   length stat $15;
  63.    stat=" t' ";
  64. run;
  65. /*合并成组T检验的数据集,并定义变量的长度*/
  66. data test3(keep=tValue Probt stat);
  67.     merge test1 test2;
  68.     tValue=abs(tValue);
  69.     format tValue 6.2 Probt 6.3;
  70.     put #1 @3 "&index"
  71.     #2 @5 "例数(缺失)" @22 NA'(' MA')' @42 NB'(' MB')'
  72.     @60 stat '=' tValue @80 'P=' Probt
  73.     #3 @5 "均数±标准差" @22 MeanA'± ' StdA @42 MeanB ' ± ' StdB
  74.     #4 @5 "中位数" @22 MedA @42 MedB
  75.     #5 @5 "最大值" @22 MaxA @42 MaxB
  76.     #6 @5 "最小值" @22 MinA @42 MinB;
  77. run;
  78. %mend jiliang;
  79. %jiliang (anova1,x,tizhong);
复制代码

藤椅
cathy911213 发表于 2014-9-18 13:15:55
苹果叶 发表于 2014-9-18 00:07
建议写code,每个step 都加一个run , 每个分号一行, 两段code 之间空一行,不然好难看。
谢谢谢谢,你好厉害啊

您需要登录后才可以回帖 登录 | 我要注册

本版微信群
加好友,备注cda
拉您进交流群
GMT+8, 2026-1-10 22:48