繁体   English   中英

相当于PROC IML中的SAS函数重复

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM