Indexing SAS索引函数?
有人能解释为什么下面的代码给出两个不同的值吗Indexing SAS索引函数?,indexing,sas,Indexing,Sas,有人能解释为什么下面的代码给出两个不同的值吗 87 data _null_; 88 length a b $14; 89 a = 'ABC.DEF (X=Y)'; 90 b = 'X=Y'; 91 x = index(a,b); 92 y = index('ABC.DEF (X=Y)','X=Y'); 93 put x y; 94 run; 0 10 NOTE: DATA statement used (Total proce
87 data _null_;
88 length a b $14;
89 a = 'ABC.DEF (X=Y)';
90 b = 'X=Y';
91 x = index(a,b);
92 y = index('ABC.DEF (X=Y)','X=Y');
93 put x y;
94 run;
0 10
NOTE: DATA statement used (Total process time):
real time 0.01 seconds
cpu time 0.01 seconds
谢谢。这似乎是的精确副本,因此如果您先在那里寻找答案,会很有帮助 这是他们的解释: 例2: 将索引函数与修剪函数一起使用时删除尾随空格 下面的示例显示了使用带或不带修剪功能的索引功能时的结果。如果使用INDEX而不使用TRIM函数,则前导空格和尾随空格将被视为摘录参数的一部分。如果将INDEX与TRIM函数一起使用,TRIM将从摘录参数中删除尾随空格,如本例所示。请注意,微调功能用于索引功能内部。 选项nodate nostimer ls=78 ps=60
data _null_;
length a b $14;
a='ABC.DEF (X=Y)';
b='X=Y';
q=index(a,b);
w=index(a,trim(b));
put q= w=;
run;
SAS将以下输出写入日志:
q=0 w=10
根据mjsqu的评论添加:
data _null_;
length a b $14 c $3;
a='ABC.DEF (X=Y)';
b='X=Y';
c='X=Y';
x=index(a,b);
y=index(a,c);
z=index(a,trim(b));
d = "|" || a ||"|";
e = "|" || b ||"|";
f = "|" || c ||"|";
put d=;
put e=;
put f=;
put x= y= z=;
run;
d=|ABC.DEF (X=Y) |
e=|X=Y |
f=|X=Y|
x=0 y=10 z=10
您可以看到b有一个尾随空格,它是索引函数将要查找的字符串的一部分。由于在
字符串中,a
X=Y后跟)而不是空格,这意味着将找不到它=>q=0。您还可以在这里看到,如果您将b的长度更改为要查找的字符串的实际长度(在本例中为3),则会得到相同的结果。这似乎是的精确副本,因此如果您首先在此处查找答案,将非常有帮助
这是他们的解释:
例2:
将索引函数与修剪函数一起使用时删除尾随空格
下面的示例显示了使用带或不带修剪功能的索引功能时的结果。如果使用INDEX而不使用TRIM函数,则前导空格和尾随空格将被视为摘录参数的一部分。如果将INDEX与TRIM函数一起使用,TRIM将从摘录参数中删除尾随空格,如本例所示。请注意,微调功能用于索引功能内部。
选项nodate nostimer ls=78 ps=60
data _null_;
length a b $14;
a='ABC.DEF (X=Y)';
b='X=Y';
q=index(a,b);
w=index(a,trim(b));
put q= w=;
run;
SAS将以下输出写入日志:
q=0 w=10
根据mjsqu的评论添加:
data _null_;
length a b $14 c $3;
a='ABC.DEF (X=Y)';
b='X=Y';
c='X=Y';
x=index(a,b);
y=index(a,c);
z=index(a,trim(b));
d = "|" || a ||"|";
e = "|" || b ||"|";
f = "|" || c ||"|";
put d=;
put e=;
put f=;
put x= y= z=;
run;
d=|ABC.DEF (X=Y) |
e=|X=Y |
f=|X=Y|
x=0 y=10 z=10
您可以看到b有一个尾随空格,它是索引函数将要查找的字符串的一部分。由于在
字符串中,a
X=Y后跟)而不是空格,这意味着将找不到它=>q=0。这里还可以看到,如果将b的长度更改为要查找的字符串的实际长度(本例中为3),则会得到相同的结果。谢谢,但我没有使用修剪功能。我希望x和y具有相同的值,因为值a和b与y的参数相同。但事实并非如此,有什么想法吗?通过运行put“|”b+(-1)”|”,检查b
变量的实际值代码>,这应表明变量具有前导空格或尾随空格'X=Y'
或'X=Y'
,这在a
@mjsqu的值中找不到,我将您的建议添加到我的答案中以进行澄清。我希望你不介意。@Yohsoog没问题,看起来你做了一个更好的例子,回答很好:)谢谢,但我没有使用修剪功能。我希望x和y具有相同的值,因为值a和b与y的参数相同。但事实并非如此,有什么想法吗?通过运行put“|”b+(-1)”|”,检查b
变量的实际值代码>,这应表明变量具有前导空格或尾随空格'X=Y'
或'X=Y'
,这在a
@mjsqu的值中找不到,我将您的建议添加到我的答案中以进行澄清。我希望你不介意。@Yohsoog没问题,看起来你做了一个更好的例子,很好的回答:)