SAS在数据重新编码期间切断字符串

时间:2016-11-05 19:47:37

标签: sas

在由以下人员创建的数据集上:

data voa;
    input Address $50.;
    input City $1-15 State $16-17 Zip;
    input Latitude Longitude;
    datalines;
1675 C Street, Suite 201
Anchorage      AK  99501    
61.21       -149.89
600 Azalea Road
Mobile         AL  36609
30.65       -88.15  

我正在尝试添加一个新变量,这对于Long和Lat的重新编码至关重要,如下所示:

data voa1;
    set voa;
    if Longitude < -110 then Region = "West";
    if Latitude > 40 and Longitude < -90 and Longitude > -110 then Region = "Mid-West";
    if Latitude > 40 and Longitude > -90 then Region = "North-East";
    if Latitude < 40 and Longitude < -110 then Region = "South";
run;

不幸的是,似乎SAS正在缩短字符串并将其保留为4个字符(例如“中西部”只是变成“中 - ”)。如果我不得不猜测我会认为这是因为SAS根据该列中的第一个值为列中的每个值分配一定数量的字节,并且不会根据新值动态修改字节数。我该如何解决这个问题?

注意:我认为潜在的解决方案可能会将最长的潜在输出(在本例中为“东北”)放在第一位,但这似乎是一个不优雅的解决方案。

1 个答案:

答案 0 :(得分:2)

SAS的一个很好的功能是在使用变量之前不必强制定义变量。但是,如果您没有定义变量,那么SAS必须猜测您编写的代码的含义。在您的情况下,因为第一次引用新变量Region在赋值语句中:

Region = "West"

SAS做出逻辑决定,将其定义为长度为4的字符变量。

要修复此问题,只需在第一个LENGTH语句之前添加IF语句。

length region $10;