2015-06-01 692 views
2

我有包含空单元格的数据集。它看起来像删除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; 

但它不是工作国王也是如此。

我只想删除空单元格的行。 任何人都可以帮助我解决这个问题?提前致谢 !!!

+0

乔提到,上面的代码仍然适用于字符到数字的自动转换。必须有其他事情正在进行。你的数据步骤还有其他什么吗? – DWal

回答

1

您只需通过检查,必须填充变量使用一个子集if nmiss()

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

谢谢@Bendy,但它不工作...输出T.T –

+0

有0 obs检查你的年/卷变量是数字...如果他们是字符,那么使用'cmiss()'作为乔提到 – Bendy

1

不要使用数字变量,如报价:

if volume = . then delete; 

,对工程其他选项字符或数字:

if missing(volume) then delete; 
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期望列表。)


你的第二个不工作,顺便说一句,因为它与其他人一起catting的ID变量。您可以通过查看cats的值(即将其分配给一个变量)来看到此情况。你可能会说

if cats(of _all_) = ID then delete;

但我们几个已经表明这可能不如使用nmiss简单的解决方案。

0

你可以在SET语句中使用where条款这里还有:

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

我一直喜欢使用is not missing语法,因为看起来太像写普通英语为工作语言