这是一个简单的,但我有点挣扎。
我有什么:
我想要的是什么:
我想删除v0,v1等。
我正在使用这段代码
data IndieDay20140704;
set IndieDay20140704;
do i=1 to 5;
VAR1=tranwrd(var1,"v&i","");
end;
run;
它没有正常工作,因为它给了我这个(见下文)加上错误
WARNING: Apparent symbolic reference I not resolved.
问题:
1)我需要一个宏吗? 2)为什么会出错?
非常感谢您的见解。
答案 0 :(得分:0)
由于您(无意中)使用宏变量i
而未初始化,因此出现错误。
我想tranwrd
的想法是从VAR2
删除VAR3
,VAR1
..中的字词。
逻辑错误也是为VAR1
本身做的。
检查这是否有帮助(使用数组):
data IndieDay20140704;
length VAR1 VAR2 VAR3 VAR3 VAR5 $10;
VAR1 = 'TEST IT';VAR5 = 'TEST';
output;
VAR1 = 'STEST IT';VAR5 = 'TEST';
output;
run;
data IndieDay20140704_modified / view= IndieDay20140704_modified;
set IndieDay20140704;
array vals VAR1 - VAR5;
do i=1 to dim(vals);
if i ne 1 then VAR1=tranwrd(var1,trim(vals(i)),"");
end;
drop i;
run;
这里我在桌面上创建一个SAS视图(不是一个覆盖源的好主意)。
另外我认为你应该trim()
来自VAR2,VAR3的值...取决于你想要达到的目标以及数据中的内容。
编辑: 这里的版本是' v0',' v1' ...' v5'字符串:
data IndieDay20140704;
length VAR1$10;
VAR1 = 'TEST v0';
output;
VAR1 = 'TEST v11';
output;
VAR1 = 'TEST v1';
output;
run;
data IndieDay20140704_modified / view= IndieDay20140704_modified;
set IndieDay20140704;
org_var1 = var1;
do i=0 to 5;
var1 =tranwrd(var1, catt('v', put(i, 1. -L)),"");
end;
run;
catt('v', put(i, 1. -L))
连接字符串' v'以及put
的结果。
put(i, 1. -L))
使用纯数字格式i
将数字变量w.d
转换为文本,此处使用1.
- 足以支持单位数字,-L
左对齐结果
答案 1 :(得分:0)
这是一种方式,还有很多其他方法,如果您的数据有很多可变性,这可能无效。
data have;
length VAR1$10;
VAR1 = 'fic19v0.csv';
output;
VAR1 = 'fic19v1.cs';
output;
run;
data want ;
set have;
original_var=var1;
var1=substr(var1, 1, index(var1, ".")-3)||".csv";
run;