我想在PROC IML
中定义一个字符串,比如说“aaaaa”(五个“a”)。
在DATA
步骤中,我将使用repeat()
函数,该函数创建一个字符串重复子字符串,如the documentation中所述。
data _null_;
x=repeat('a',4); /* string with five 'a' */
put x;
run;
但是,在SAS / IML中,repeat()
函数是不同的:它创建了一个矩阵重复另一个元素(文档here)。
因此,如果我使用此函数,我将得到一个带有五个“a”元素的向量。
proc iml;
x=repeat('a',5); /* 5 'a' strings */
print x;
quit;
在那个例子中,我显然不会打扰并直接使用:
x="aaaaa";
但是如果我需要一个更大的字符串(例如100“a”)怎么办?我也可以在PROC IML
之外创建它并在之后导入它但是必须有一个更聪明的方法来解决这个问题,不是吗?
答案 0 :(得分:3)
无需编写循环。使用ROWCATC函数跨列连接元素:
proc iml;
N = 10;
x = rowcatc(repeat("a", 1, N)); /* repeat 'a' N times */
print x (nleng(x))[L="Length"];
一个稍微难点的问题是连接元素并在元素(空白,逗号等)之间插入某种分隔符。这些问题在文章"Convert a vector to a string."
中讨论答案 1 :(得分:0)
由于IML与矩阵一起使用,这就是你通常想要的。 获取列而不是行:
requestAlwaysAuthorization
您可以使用循环将矢量转换为字符串。但在这种情况下,跳过重复并直接使用循环来生成字符串会更有意义:
proc iml;
x=repeat('a', 1, 5);
print x;
quit;
x
a a a a a