相同的代码在 SAS 9.4 TS1M3 中的函数中有效;它可能不在早期版本中(在 9.4 和维护版本 TS1M2 和 3 中,对 FCMP 中数组的处理方式进行了重大更改)。
但是,这并不能真正解决您的任意长度问题;当我运行你的函数时
outtext = cat(of final{*});
return (outtext);
我得到... 1 个字符!当我跑步时
return(cats(of final{*}));
输出:
Obs text_enc finaltext
1 ABCABlABjABhAB1ABzABlAAgABVABUABGAA4AAgABpABzAAgABoABhAByABk BecauseU
2 ABTABpABtABwABsABlAByAAgABsABpABrABlAAgAB0ABoABpABz Simplerl
3 ABJABvAAgABJABvAAgABCAByABvABtABpABvABz IoIoBrom
这更好一点(猫为你修剪),我仍然只有 8 个字符。这是因为 8 个字符是 SAS 中未声明字符变量的默认长度。扩展长度(使用length
outtext 的语句),你会得到:
Obs text_enc finaltext
1 ABCABlABjABhAB1ABzABlAAgABVABUABGAA4AAgABpABzAAgABoABhAByABk BecauseUTF8ishard
2 ABTABpABtABwABsABlAByAAgABsABpABrABlAAgAB0ABoABpABz Simplerlikethis
3 ABJABvAAgABJABvAAgABCAByABvABtABpABvABz IoIoBromios
那么,您仍然需要定义所需的任何长度。据我所知,FCMP 不允许使用未定义长度的字符串。您需要为要返回的字符串定义默认(和最大)长度。欢迎用户定义更短的长度,并且在适当的时候应该这样做。