[英]Equivalent to SAS function repeat in PROC IML
我想在PROC IML
定义一个字符串,比如“aaaaa”(五个“a”)。 在DATA
步骤中,我将使用repeat()
函数,该函数创建一个重复子串的字符串,如文档中所述 。
data _null_;
x=repeat('a',4); /* string with five 'a' */
put x;
run;
但是,在SAS / IML中, repeat()
函数是不同的:它创建了一个矩阵重复另一个元素( 这里的文档)。 所以,如果我使用这个函数,我将得到一个带有五个“a”元素的向量。
proc iml;
x=repeat('a',5); /* 5 'a' strings */
print x;
quit;
在那个例子中,我显然不会打扰并直接进入:
x="aaaaa";
但是,如果我需要一个更大的字符串(例如100“a”)怎么办? 我也可以在PROC IML
之外创建它并导入它但是必须有一个更聪明的方法来解决这个问题,不是吗?
无需编写循环。 使用ROWCATC函数跨列连接元素:
proc iml;
N = 10;
x = rowcatc(repeat("a", 1, N)); /* repeat 'a' N times */
print x (nleng(x))[L="Length"];
一个稍微难点的问题是连接元素并在元素(空白,逗号等)之间插入某种分隔符。 “将矢量转换为字符串”一文中讨论了这些问题。
由于IML与矩阵一起使用,这就是您通常想要的。 要获取列而不是行:
proc iml;
x=repeat('a', 1, 5);
print x;
quit;
x
a a a a a
您可以使用循环将矢量转换为字符串。 但在这种情况下,跳过重复并直接使用循环生成字符串会更有意义:
proc iml;
x="";
do i = 1 to 5;
x = x + 'a';
end;
print x;
quit;
x
aaaaa
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.