我有包含空单元格的数据集。看起来像
Year Volume ID
2000 999 LSE
2001 . LSE
. 555 LSE
2008 . NYSE
2010 1099 NYSE
我需要删除包含空单元格的行。输出应如下所示
Year Volume ID
2000 999 LSE
2000 1099 NYSE
我尝试了以下代码
data test;
set data;
if volume = " . " then delete;
if year= " . " then delete;
run;
但是输出文件有0个观测值,SAS给了我
NOTE: Character values have been converted to numeric values at the
places given by (Line):(Column).
我也试过
options missing = ' ';
data test;
set data;
if missing(cats(of _all_)) then delete;
run;
但是它不起作用。
我只想删除具有空单元格的行。
有人可以帮助我解决这个问题吗?提前致谢 !!!
最佳答案
Options Missing
仅影响数字->字符时事物的打印或转换方式。在这种情况下,您拥有数字,因此它什么也做不了。
您的第一个代码示例大部分是正确的-至少在我尝试时,它可以工作。 " . "
并不完全正确,但是由于这些字符都不是数字,因此它将转换(如注释所述)为丢失。
正确的方法是以下两种方法之一:
data have;
input Year Volume ID $;
datalines;
2000 999 LSE
2001 . LSE
. 555 LSE
2008 . NYSE
2010 1099 NYSE
;;;;
run;
data want;
set have;
if year = . then delete;
if volume = . then delete;
run;
要么
data want;
set have;
if missing(year) then delete;
if missing(volume) then delete;
run;
如果缺少变量(包括28个值,但
missing
是最常见的),则 .
返回true。一种更好的方法是使用
nmiss
或cmiss
函数(用于数字的nmiss
,用于字符或混合类型的cmiss
)。data want;
set have;
if nmiss(year,volume) = 0;
run;
这将返回缺失值的数量,然后您可以测试缺失值的数量(在本例中为零值)。您甚至可以:
data want;
set have;
if nmiss(of _NUMERIC_) = 0;
run;
其中
_NUMERIC_
是所有数字变量。 (这样的变量列表需要of
才能告诉SAS期望有一个列表。)顺便说一句,您的第二个代码不起作用,因为它会将ID变量与其他变量结合在一起。您可以通过查看该
cats
的值(即,将其分配给变量)来查看。你可能已经说过if cats(of _all_) = ID then delete;
但是正如我们中的一些人所示,它可能不及使用
nmiss
的简单解决方案。