如何在SAS中将字符变量拆分为多个变量?
我想将下面的字符变量(Have)拆分为多个变量(时间、车道和方向) 我得到了除Lane变量之外的所有变量如何在SAS中将字符变量拆分为多个变量?,sas,Sas,我想将下面的字符变量(Have)拆分为多个变量(时间、车道和方向) 我得到了除Lane变量之外的所有变量 data up; set outdata; Hour=scan(Have, 1); Hour=compress(hour,'','a'); Lane = scan(Have, 2); Direction =scan(Have, -1); Direction = tranwrd(Direction, "Lanes", " "); run;
data up;
set outdata;
Hour=scan(Have, 1);
Hour=compress(hour,'','a');
Lane = scan(Have, 2);
Direction =scan(Have, -1);
Direction = tranwrd(Direction, "Lanes", " ");
run;
下面是一个对示例数据有效的解决方案 尽可能使用SCAN(),然后使用TRANWRD“删除”找到的单词,最后只留下车道信息。这适用于示例数据,但可能无法根据实际数据中数据格式的变量进行概括。如果遇到边缘情况,请更新示例数据以反映这些情况
data up;
set outdata;
Direction=scan(Have, 2, "()");
if anydigit(char(have, 1)) then
do;
hour=scan(have, 1);
end;
*Remove direction;
have2=tranwrd(have, catt("(", Direction, ")"), "");
*Remove time;
Lane=compbl(tranwrd(have2, trim(hour), ""));
keep Have Direction Hour Lane;
run;
proc print data=up;
run;
您可以使用有条件保持的
输入(@
)来读取和保留时间
值。读取车道
和方向
值需要其他输入
语句功能,如调整后的分隔符列表(dlm=
)
例如:
data outdata;
attrib
time format=time5.
lane length=$10
direction length=$5
;
retain time;
input @;
if index(_infile_,':') then input time time5. @;
input lane direction;
infile datalines dlm='()' missover;
datalines;
00:00 Lane 1 (North)
Lane 2 (North)
Lane 3 (South)
Lane 4 (East)
All Lanes
01:00 Lane 1 (North)
;
这两个问题相关吗?如果不是,你最好把它们分开?如果是,可能会更简单,但您需要确定它们之间的关系。似乎您正在尝试从格式不正确的Excel文件导入数据?或者字段是否始终位于特定位置?确切地说:(您可以跳过第二个问题……您能帮我回答第一个问题吗……我已经为除lane one之外的其他列做了哪些工作?如何从have变量中提取lane变量?如果您已经完成了其他列的工作,那么可以很容易地使用TRANWD删除其他组件。展示您所做的工作,我将展示如何实现TRANWR。)D函数。
data outdata;
attrib
time format=time5.
lane length=$10
direction length=$5
;
retain time;
input @;
if index(_infile_,':') then input time time5. @;
input lane direction;
infile datalines dlm='()' missover;
datalines;
00:00 Lane 1 (North)
Lane 2 (North)
Lane 3 (South)
Lane 4 (East)
All Lanes
01:00 Lane 1 (North)
;