所以我正在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。
错误:未找到有效的观察结果。
可能是因为表格在数据步骤之后是空的,所以当我指定模型时会出现两个错误。
答案 0 :(得分:2)
在第一步中,您将创建一个名为c
的数据集,然后创建一个名为d
的数据集。
在第二步中,通过在d
语句中指定proc reg
,“擦除”数据集d
将其替换为数据集out=d
上proc reg
的输出。
在第三步中,您所做的就是在每个d
和data
步骤中再次覆盖proc
。在data d;
步骤中,每次都从零开始创建一个新数据集(无set
语句),它只包含一个缺失值记录,因为您从不存在的变量中分配值。在proc reg
步骤中,您从d
(data=d
)的阅读和输出到d
(out=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
的原始永久数据集?