等效于SAS IML中的R findInterval()函数

等效于SAS IML中的R findInterval()函数,r,sas,R,Sas,在SAS中,特别是在IML中,是否有类似于R的findInterval(或cut)的内容 我正在将我的一个进行蒙特卡罗模拟的R程序转换为IML,它使用findInterval将随机数生成器中的数字转换为输出状态。我可以用IML写一些东西来代替它,但它比原来的版本慢得多。这是因为findInterval利用了编译好的C代码;我可以在SAS中使用类似的方法吗?您的中断是否一致(等概率)? 对于均匀中断,可以使用ceil(k*u),其中u是向量或随机均匀数。 例如,如果你想将10个观察值以相同的概率随

在SAS中,特别是在IML中,是否有类似于R的
findInterval
(或
cut
)的内容

我正在将我的一个进行蒙特卡罗模拟的R程序转换为IML,它使用
findInterval
将随机数生成器中的数字转换为输出状态。我可以用IML写一些东西来代替它,但它比原来的版本慢得多。这是因为
findInterval
利用了编译好的C代码;我可以在SAS中使用类似的方法吗?

您的中断是否一致(等概率)? 对于均匀中断,可以使用ceil(k*u),其中u是向量或随机均匀数。 例如,如果你想将10个观察值以相同的概率随机分配给数字1-4,你可以说

y = ceil(4*ranuni(j(10,1)));
或者,如果您想使用较新的随机数生成器

u = j(10,1); /** allocate **/
call randgen(u, "uniform"); /** fill with U[0,1] **/
y = ceil(4*u);
对于不等概率,使用“表”分布。比如说,

p = {0.1 0.5 0.2 0.2}; /** four categories with given probabilities **/
y = j(10, 1); 
call randgen(y, "Table", p); /** fills with 1-4 with probability p **/
您可能对使用我的书《SAS/IML软件的统计编程》第13章中的SampleWithReplace模块感兴趣。您可以下载该代码,并在

这两种技术都不需要findInterval,因为它们直接生成类别。如果您真的认为需要对随机数进行分类,您可以使用我在这里描述的算法:

我可能应该描述一下
findInterval
的功能!给定一个值x和一个排序割点向量vec,它会找到x所在的割点,即x所属的区间。更准确地说,如果
vec[i]
,则
findInterval
返回
i
。参数
x
也可以是一个向量,在这种情况下,它返回一个区间向量。顺便说一下,SAS 9.3在SAS/IML语言中引入了BIN函数。看见