簡體   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