2015-12-22 59 views
2

我试图创建一个proc格式读取邮政编码并相应地将标签应用到其状态。SAS无法加载Proc格式

出于某种原因,尽管我的两个开始和结束领域是数字,它使返回一个错误,说:

“格式ZONENEW未找到或无法加载”

我唯一的解决方法是将我的Pcode数据更改为文本,并将我的开始和结束格式字段更改为文本。

这是我现有的代码,仍然在其数字格式。

data Fmt_All_zones; 
    set all_zones end=eof; 
    retain type 'c'; 
    fmtname = 'zonenew'; 
    start = pcode_fr; 
    end = pcode_to; 
    label = key; 
    output;  

    if eof then do; 
     start = 'other'; 
     end = 'other'; 
     label = "Error"; 
     output; 
    end; 
run; 

proc format cntlin = fmt_all_zones library = work; 
run;   

data TestPostcodes; 
    input Pcode; 
    datalines; 
    2050 
    2065 
    3000 
    2879 
    9999 
    1999 
    6488 
    ; 
run; 

data FilteredPcode; 
    set TestPostcodes;  
    Pcode_Label = put(Pcode, zonenew.);  
run; 

我希望有一个解释来帮助我理解这个过程!谢谢。

+0

您的邮政编码是数字,所以您需要一个数字类型,而不是字符。 – Reeza

回答

1

您通过设置TYPE='C'来定义字符格式。如果您需要数字格式,请使用TYPE='N'

+0

伟大的工作! 我如何为我的邮编定义“其他”范围?因为如果邮政编码是数字,它不会接受文本定义。 – Wolfspirit

+0

在'if eof'块中添加'hlo ='o';'。深入阅读: http://www2.sas.com/proceedings/forum2007/068-2007.pdf – user667489

+0

如果您已指定'TYPE'变量,则'START'变量是字符还是数字无关紧要。 – Tom