我在SAS工作时有一个大约有80000个观察的文件,我决定保留11个变量。
我想删除值超过97的变量。这些是缺少的观察结果,我不想处理它。
我尝试使用以下代码(请不要判断):
199 DATA radata;
200 SET radata;
201 IF ca10 <= 97 THEN OUTPUT;
202 IF ca10 > 97 THEN DELETE;
203 IF sex <= 97 THEN OUTPUT;
204 IF sex > 97 THEN DELETE;
205 IF sex <= 97 THEN OUTPUT;
206 IF sex > 97 THEN DELETE;
207 IF cityrur <= 97 THEN OUTPUT;
208 IF cityrur > 97 THEN DELETE;
209 IF edu3 <= 97 THEN OUTPUT;
210 IF edu3 > 97 THEN DELETE;
211 IF ca10 <= 97 THEN OUTPUT;
212 IF ca10 > 97 THEN DELETE;
213 IF hinc3rel <= 97 THEN OUTPUT;
214 IF hinc3rel > 97 THEN DELETE;
215 IF aa10i <= 97 THEN OUTPUT;
216 IF aa10i > 97 THEN DELETE;
217 IF ba10 <= 97 THEN OUTPUT;
218 IF ba10 > 97 THEN DELETE;
219 IF age <= 97 THEN OUTPUT;
220 IF age > 97 THEN DELETE;
221 IF ga10c <= 97 THEN OUTPUT;
222 IF ga10c > 97 THEN DELETE;
223 IF bc20 <= 97 THEN OUTPUT;
224 IF bc20 > 97 THEN DELETE;
225 IF ac10a <= 97 THEN OUTPUT;
226 IF ac10a > 97 THEN DELETE;
227 IF ga10j <= 97 THEN OUTPUT;
228 IF ga10j > 97 THEN DELETE;
229 RUN;
然而,SAS不是通过减去观察而是通过添加更多观察来做出回应!
请帮助.....
答案 0 :(得分:1)
https://communities.sas.com/可能是一个提出这样一个编程问题的好地方(如果这个问题被关闭,我也不会感到惊讶。)
以下是删除所有观察值(即行)的3种方法,其中至少有一个变量值大于97:
data radata;
set radata;
array x(10) ca10 sex cityrur edu3 hinc3 aa10i age ga10c bc20 ga10j;
do i=1 to 10;
if x(i) > 97 then delete;
end;
run;
或
data radata;
set radata;
if ca10 > 97 then delete;
if sex > 97 then delete;
if cityrur > 97 then delete;
if edu3 > 97 then delete;
if hinc3 > 97 then delete;
if aa10i > 97 then delete;
if age > 97 then delete;
if ga10c > 97 then delete;
if bc20 > 97 then delete;
if ga10j > 97 then delete;
run;
或
data radata;
set radata;
if ca10 > 97 or sex > 97 or cityrur > 97 or edu3 > 97 or
hinc3 > 97 or aa10i > 97 or age > 97 or ga10c > 97 or
bc20 > 97 or ga10j > 97 then delete;
run;
现在,如果您只是希望这些变量具有缺失值符号(.
)而不删除整个观察结果,那么您需要将delete
替换为x(i) = .
。你可以为第二个例子做类似的事情。