Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/sql-server-2008/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
SAS卡方检验_Sas_Sas Macro - Fatal编程技术网

SAS卡方检验

SAS卡方检验,sas,sas-macro,Sas,Sas Macro,我打算对以下数据集执行卡方检验(所有变量均为分类变量) 测试需要在所有级别执行,即range1、range2和area。一种方法是创建一个宏来执行相同的操作。但是我有大约300个变量&调用宏300次是没有效率的。我用于3个变量的代码如下所示: options mprint mlogic symbolgen; %macro chi_test(vars_test); proc freq data =testdata.AllData; tables &vars_test*Indicator/

我打算对以下数据集执行卡方检验(所有变量均为分类变量)

测试需要在所有级别执行,即range1、range2和area。一种方法是创建一个宏来执行相同的操作。但是我有大约300个变量&调用宏300次是没有效率的。我用于3个变量的代码如下所示:

options mprint mlogic symbolgen;
%macro chi_test(vars_test);
proc freq data =testdata.AllData;
tables &vars_test*Indicator/ norow nocol nopercent chisq ;
output out=stats_&vars_test &vars_test PCHI;
run;
data all_chi;
set stats_:;
run;
%mend chi_test;
%chi_test(Range1);
%chi_test(Range2);
%chi_test(Area);

有人能帮忙吗?

为什么不转置数据并按组处理使用呢

首先添加一个唯一的行标识符,以便PROC TRANSPOSE可以将变量转换为单个列

data have_extra;
  row+1;
  set have;
run;

proc transpose data=have_extra out=tall ;
  by row indicator ;
  var area range1 range2 ;
run;
然后按原始变量名对记录进行排序

proc sort; by _name_ ; run;
然后,您可以为每个原始变量运行CHI-SQ

proc freq data =tall ;
  by _name_;
  tables col1*Indicator/ norow nocol nopercent chisq ;
  output out=all_chi  PCHI;
run;

为什么不直接转置数据并按组处理使用呢

首先添加一个唯一的行标识符,以便PROC TRANSPOSE可以将变量转换为单个列

data have_extra;
  row+1;
  set have;
run;

proc transpose data=have_extra out=tall ;
  by row indicator ;
  var area range1 range2 ;
run;
然后按原始变量名对记录进行排序

proc sort; by _name_ ; run;
然后,您可以为每个原始变量运行CHI-SQ

proc freq data =tall ;
  by _name_;
  tables col1*Indicator/ norow nocol nopercent chisq ;
  output out=all_chi  PCHI;
run;

如果所有变量都是分类变量,则可以在
语句中使用
\u all
,以及数据集的
ods输出
。这将创建一个包含所有变量组合*指标的数据集

如果需要,可以对输出数据集应用数据集选项(where=、keep=、drop=etc)

data have;
input Indicator   Area $   Range1 $ Range2 $;
datalines;
0   A   17-25   25-50
0   A   17-25   25-50
0   A   17-25   25-50
0   A   17-25   25-50
0   A   0-17    25-50
1   B   17-25   25-50
1   B   0-17    17-25
1   B   17-25   25-50
;
run;

ods select chisq;
ods output chisq=want;
proc freq data=have;
tables _all_*Indicator/ norow nocol nopercent chisq;
run;

如果所有变量都是分类变量,则可以在
语句中使用
\u all
,以及数据集的
ods输出
。这将创建一个包含所有变量组合*指标的数据集

如果需要,可以对输出数据集应用数据集选项(where=、keep=、drop=etc)

data have;
input Indicator   Area $   Range1 $ Range2 $;
datalines;
0   A   17-25   25-50
0   A   17-25   25-50
0   A   17-25   25-50
0   A   17-25   25-50
0   A   0-17    25-50
1   B   17-25   25-50
1   B   0-17    17-25
1   B   17-25   25-50
;
run;

ods select chisq;
ods output chisq=want;
proc freq data=have;
tables _all_*Indicator/ norow nocol nopercent chisq;
run;

寻找用户编写的宏,但一定要测试它们。你可以在lexjansen.com上搜索示例。我的建议是:寻找用户编写的宏,但一定要测试它们。你可以在lexjansen.com上搜索示例。我的在这里: