删除SAS中的空行

时间:2015-06-01 13:31:02

标签: sas

我的数据集包含空单元格。它看起来像

 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;

但它的效果不佳。

我只想删除空单元格的行。 有人可以帮我解决这个问题吗?在此先感谢!!!

4 个答案:

答案 0 :(得分:3)

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;
如果缺少变量,

missing将返回true(其中包含28个总值,但.是最常见的)。

更好的方法是使用nmisscmiss函数(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的简单解决方案。

答案 1 :(得分:1)

您可以通过检查必须填充的变量来使用子集if nmiss()

data test;
  set data;
  if nmiss(year,volume)=0 ;
run;

答案 2 :(得分:1)

不要在数字变量中使用引号,例如:

if volume = .  then delete;

适用于字符或数字的其他选项:

if missing(volume) then delete;

答案 3 :(得分:0)

您也可以在set语句中使用where子句:

data new_dataset;
 set old_dataset (where = (volume is not missing or year is not missing));
run;

我总是喜欢使用is not missing语法,因为它似乎与编写普通英语非常相似