原问题以及解答在上面,其中yatming对FIND+INDEX寻找字符的解释很值得学习
在这里解释一下下面程序中的KINDEX
data raw;
input text $1-50;
a=ifn(sum(kindex(text,'天健'),kindex(text,'亚太'),kindex(text,'晋元')),1,0);
datalines;
长沙孜信有限责任会计师事务所
中庆会计师事务所有限责任公司
河北华安会计师事务所有限公司
新疆华西会计师事务所
江苏天衡会计师事务所有限公司
山东正源和信有限责任会计师事务所
山东正源会计师事务所有限公司
普华永道中天会计师事务所
山东正源会计师事务所有限公司
安达信华强会计师事务所
中鸿信建元会计师事务所有限责任公司
山东烟台乾聚会计师事务所有限公司
云南亚太会计师事务所
大连正元会计师事务所
宁夏五联会计师事务所
浙江天健会计师事务所
天津津源会计师事务所
武汉会计师事务所
浙江天健会计师事务所
山西晋元会计师事务所
岳华(集团)会计师事务所
;
KINDEX在HELP里面的解释如下:
The KINDEXC function searches source, from left to right, for the first occurrence of any character present in the excerpts and returns the position in source of that character. If none of the characters in excerpt-1 through excerpt-n in source are found, KINDEXC returns a value of 0.
在这里引用一个例子:
data _null_;
value = 'firstname lastname';
pos=kindex(value,'s');
put pos=;
run;
大家看看结果就知道了
在这个程序难以理解应该是IFN(sum(......),1,0)
对于IFN这个函数,IFN(logical-expression, value-returned-when-true, value-returned-when-false <,value-returned-when-missing>)
先是对SUM()这个语句进行的一个逻辑判断,这也是问题所在,SUM()如何进行的逻辑判断呢?
其实这个和之前在IF C=1 OR 2 有点一样,大家可以看看跟crackman读程序其他例子有详解和测试
那么SUM()返回的就是一个数字,如果是SUM()=0或者缺失就是 false,如果SUM()=1 就是TRUE,如果SUM()不等于1,也不等于0,也不是缺失值,那么就恒为TRUE。
可以做几个测试就知道:
data crackman;
a=ifn(0,1,0);
;
put a=;
data crackman;
a=ifn(1,1,0);
put a=;
data crackman;
a=ifn(2,1,0);
;
put a=;
data crackman;
a=ifn(.,1,0);
put a=;
|