SAS 程序冷知识——单个变量内的排序

        最近遇到了这样一个问题:有一个变量内容大概是这样的 “4,2,6,4,1,7,5” 。里面是数字,然后用分隔符分开。需求是要让变量里得数字按顺序排列。最开始我在想有没有什么函数或者例程,但是似乎并没有。于是思路变成把这个变量拆成若干变量然后再用call sort进行排序,最后再合并。

        于是问题变成了,有没有办法可以把这个变量拆开。解决办法当然是现成得,就是通过循环+array解决。代码如下:

array abc(100) _TEMPORARY_;

n=countw(VAR,',');

if n >100 then put 'Error: Checking Var!!';

do i=1 to n;

    abc(i)=scan(VAR,i,',');

end;

call sort(of abc(*));

VAR=catx(',',of abc(*));

call missing(of abc(*));

        首先想到得是用array中的 _TEMPORARY_ ,它可以生成临时的变量,这些变量没有名字(没指定嘛),只能通过数组名来确定。而且临时变量是不会随着PDV被清空的,换句话说这些临时变量天生就是retain的。这也是为什么代码最后要清空这些变量的原因。

        但这个问题在于用array必须设定变量数量,所以只能用一个比较大的数——100来覆盖。后面put语句也是为了防止错误才用的。我希望能有个方法不必设定变量数也能达到同样的效果,或者有其他更好的拆分变量的方法。

你可能感兴趣的:(SAS 程序冷知识——单个变量内的排序)