Sas表自行清空

时间:2017-11-02 16:01:21

标签: database model sas statistics regression

所以我正在SAS中练习,这应该教会我们为异方差性创建多个测试。 我做我的测试,然后我必须保留测试的剩余部分,以纠正变量。

但是d表总是以0个观察值结束,因为我说它基于原始数据集,所以它几乎就像清空了一样。我花了3个小时,我无法弄清楚为什么会这样做。我在几台机器上多次发生过。

这是我的代码:

libname mag "/folders/myfolders/data/";

data c; set mag.drogue;
lg_pxogramme= log(pxogramme);
lg_qtitegramme= log(qtitegramme);
run;
data d; set c;
run;

/*2. App Brandt*/
proc contents data=c;
proc reg data=c;
model lg_pxogramme= lg_qtitegramme puretemoy /spec;
output out=d r=r_hat;
run;

/*3.*/
data d;
lg_pxogramme= log(pxogramme);
lg_qtitegramme= log(qtitegramme);
r_2= r_hat**2;
run;
proc reg data=d;
model r_2= lg_qtitegramme puretemoy;
output out=d p=p_hat;
run;
data d;
pxogramme_c= lg_pxogramme/p_hat;
qtitegramme_c= lg_qtitegramme/p_hat;
puretemoy_c= puretemoy/p_hat;
run;
proc reg data=d;
model pxogramme_c= qtitegramme_c puretemoy_c;
run; 

我得到的两个错误是:

  • 错误:找不到可变的PURETEMOY。

  • 错误:未找到有效的观察结果。

可能是因为表格在数据步骤之后是空的,所以当我指定模型时会出现两个错误。

3 个答案:

答案 0 :(得分:2)

在第一步中,您将创建一个名为c的数据集,然后创建一个名为d的数据集。 在第二步中,通过在d语句中指定proc reg,“擦除”数据集d将其替换为数据集out=dproc reg的输出。

在第三步中,您所做的就是在每个ddata步骤中再次覆盖proc。在data d;步骤中,每次都从零开始创建一个新数据集(无set语句),它只包含一个缺失值记录,因为您从不存在的变量中分配值。在proc reg步骤中,您从ddata=d)的阅读和输出到dout=d)会根据结果覆盖您的数据。

答案 1 :(得分:0)

您正在使用以下语句重新创建数据集:

data d;
lg_pxogramme= log(pxogramme);
lg_qtitegramme= log(qtitegramme);
r_2= r_hat**2;
run;

如果您尝试包含旧副本,则需要添加set语句:

data d;
set d;
lg_pxogramme= log(pxogramme);
lg_qtitegramme= log(qtitegramme);
r_2= r_hat**2;
run;

答案 2 :(得分:0)

仔细检查您要求SAS执行的操作并阅读SAS日志以查看其执行的操作。对于每个步骤,它将显示它读取的数据和它所写的数据。

让我们看看一些程序步骤。

首先,它读入现有数据集并创建C。在这样做时创建几个新变量。

data c;
  set mag.drogue;
  lg_pxogramme= log(pxogramme);
  lg_qtitegramme= log(qtitegramme);
run;

然后它将这个新数据集复制到D

data d;
  set c;
run;

然后代码用回归分析的结果覆盖D。请参阅OUT=D声明中的OUTPUT

proc reg data=c;
  model lg_pxogramme= lg_qtitegramme puretemoy /spec;
  output out=d r=r_hat;
run;

之后,它再次使用没有输入数据的数据步骤覆盖D。因此,它会创建D一个观察点和6个缺失变量。

data d;
  lg_pxogramme= log(pxogramme);
  lg_qtitegramme= log(qtitegramme);
  r_2= r_hat**2;
run;

首先修复此步骤。您需要添加SET语句来告诉它要读取哪些数据。您还应该使用不同的输出数据集来防止覆盖回归的输出。你想让它读取回归的输出吗?第一步创建的C数据集是什么?用于创建C的原始永久数据集?