在由以下人员创建的数据集上:
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根据该列中的第一个值为列中的每个值分配一定数量的字节,并且不会根据新值动态修改字节数。我该如何解决这个问题?
注意:我认为潜在的解决方案可能会将最长的潜在输出(在本例中为“东北”)放在第一位,但这似乎是一个不优雅的解决方案。
答案 0 :(得分:2)
SAS的一个很好的功能是在使用变量之前不必强制定义变量。但是,如果您没有定义变量,那么SAS必须猜测您编写的代码的含义。在您的情况下,因为第一次引用新变量Region
在赋值语句中:
Region = "West"
SAS做出逻辑决定,将其定义为长度为4的字符变量。
要修复此问题,只需在第一个LENGTH
语句之前添加IF
语句。
length region $10;