0

我在 SAS 提供的逻辑回归建模课程中遇到了以下代码:

data dataset(drop=i);
set data;

array mi{*} mi_Ag mi_Inc
mi_WR;

array x{*} Ag Inc WR;
do i=1 to dim(mi);
mi{i}=(x{i}=.);
end;
run;

我需要明白两件事:

1.) 一旦运行此数据步骤,就会创建一个标题为“i”的列。这意味着什么以及为什么存在。删除“i”本质上是删除它,但如果我不使用删除选项,该列将保留在数据集中

2.) 此执行步骤将所有缺失值替换为 1,其余为 0。当执行步骤中没有明确指定需要做什么时,这是如何发生的。在我看来,“做 i=1 到暗淡(mi);mi{i}=(x{i}=.);” 只要在 x(i) 中找到点,就应该简单地将点放在 mi(i) 中。

第2部分:

在折叠分类变量时,使用了以下代码:

proc freq data=example1 noprint;
  tables CLUSTER_CODE*TARGET_B / chisq;
  output out=out_chi(keep=_pchi_) chisq;
run;

data ex_cutoff;
  if _n_=1 then set out_chi;
  set ex_cluster;
  chisquare=_pchi_*rsquared;
  degfree=numberofclusters-1;
  logpvalue=logsdf('CHISQ',chisquare,degfree);
run;

n = 1 在做什么?还有,我们为什么要创建 chisquare=_pchi*rsquared。pchi已经是卡方了,那么将它与 R 方相乘有什么意义呢?

谢谢

PS代码来自SAS学习课程之一。希望我可以在这里分享它以进行讨论/学习。

4

1 回答 1

0

i 是数组迭代器(在do循环中创建)。它之所以被删除,是因为它并不是真正打算保留在数据集上,它只是一个迭代器(让您一次遍历一个元素并在该迭代期间让您引用单个元素)。

mi{i}=(x{i}=.);像这样分配 1/0:

x(i)=.是真还是假。如果是true,则计算结果为1。如果是false,则评估为0。因此,当 x(i)= 为真时。然后 m(i) 被赋值为 1;否则它被分配一个 0。这就是 SAS 处理布尔(真/假)值的方式;许多其他语言也以这种方式工作(True 是非零,False 是零);并且当转换为数字时,True 被转换为 1(但任何非零非缺失值在以相反方式转换时都是“True”)。

于 2014-06-12T01:51:56.247 回答