删除SAS中的空行
我有一个包含空单元格的数据集。看起来像删除SAS中的空行,sas,Sas,我有一个包含空单元格的数据集。看起来像 Year Volume ID 2000 999 LSE 2001 . LSE . 555 LSE 2008 . NYSE 2010 1099 NYSE 我需要删除包含空单元格的行。输出应该如下所示 Year Volume ID 2000 999 LSE 2000 1099
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;
但它也不起作用
我只想删除单元格为空的行。
有人能帮我解决这个问题吗?提前感谢 如果nmiss(),您可以通过检查必须填充的变量来使用子集
:
data test;
set data;
if nmiss(year,volume)=0 ;
run;
编辑:如果year
和volume
是数字,则此功能有效,如果是字符串,则可以使用cmiss()
函数。不要使用带数字变量的引号,例如:
if volume = . then delete;
适用于字符或数字的其他选项:
if missing(volume) then delete;
缺少选项
仅影响在使用数字->字符时打印或转换内容的方式。在这种情况下,你有数字,所以它什么也做不了
您的第一个代码示例基本上是正确的-至少,当我尝试它时,它是有效的“
不太正确,但它会(如注释所示)转换为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;
或
如果缺少变量,则返回true(其中包括28个总值,但
是最常见的)
执行多个操作的更好方法是使用orcmiss
函数(nmiss
用于数字,cmiss
用于字符或混合类型)
这将返回缺失值的数量,然后您可以测试要查找的任何值(在本例中为零值)。你甚至可以:
data want;
set have;
if nmiss(of _NUMERIC_) = 0;
run;
其中\u NUMERIC\u
是所有数值变量。(的
对于这样的变量列表是必需的,以告诉SAS需要一个列表。)
顺便说一句,你的第二个不起作用,因为它把ID变量和其他变量放在一起。您可以通过查看该cats
(即,将其分配给变量)的值来了解这一点。你可以说
如果cats(of u all)=ID,则删除代码>
但是,正如我们中的一些人已经表明的那样,这可能不如使用nmiss
的简单解决方案,您也可以在set语句中使用where
子句:
data new_dataset;
set old_dataset (where = (volume is not missing or year is not missing));
run;
我一直喜欢使用不缺少
语法,因为它似乎太像写普通英语了谢谢@Bendy,但它不起作用。。。输出T.T中有0个OB检查年份/数量变量是否为数字…如果是字符,则使用cmiss()mentioned@Bendy:我编辑了你的评论,请检查这是否适合你。正如Joe提到的,你上面的代码仍然可以自动转换为数字。一定还有别的事。您的数据步骤中还有其他内容吗?
data want;
set have;
if nmiss(of _NUMERIC_) = 0;
run;
data new_dataset;
set old_dataset (where = (volume is not missing or year is not missing));
run;