2017-03-31 100 views
1

如何將前導空格打印到日誌中?輸出帶前導空格的字符串以保存空格

當我這樣做

data _null_; 
    x = ' Hello, world!'; 
    put x; 
run; 

結果是

2522 data _null_; 
2523 x = ' Hello, world!'; 
2524 putlog x; 
2525 run; 

Hello, world! 
NOTE: DATA statement used (Total process time): 
     real time   0.01 seconds 
     cpu time   0.01 seconds 

我通過PUT documentation看去,卻沒有站出來給我。似乎使用格式(例如$CHARw.)可能有效。但是,這需要提前知道字符串的長度。

我想日誌輸出看起來像這樣:

Hello, world! (<--edited by hand to display leading spaces) 
NOTE: DATA statement used (Total process time): 
     real time   0.01 seconds 
     cpu time   0.01 seconds 

回答

2

使用+2(或多麼漫長)與看跌期權的作品(但不是PUTLOG)。

data _null_; 
    x = ' Hello, world!'; 
    put +2 x $; 
run; 

隨着putlog你必須add an @ or something similar to trick the compiler

data _null_; 
    x = ' Hello, world!'; 
    putlog @ +2 x $; 
run; 
+0

只是要清楚,'@'不打印任何東西,也不是一個非打印字符 - 這是一個指針控制,但它避免了編譯器/解析器想'putlog'是一個名爲變量'putlog'代替一個聲明/函數[因爲'putlog + 2'如果是的話將是一個合法的SAS聲明)。 (雖然'put'顯然優先作爲語句/函數,'putlog'沒有得到這種優先級,可能是因爲它更新,所以爲了避免向後兼容性問題。) – Joe

+0

沒有真正解決輸出問題變量中的前導空間。 – Tom

+0

@Tom你爲什麼這麼說?它似乎對我來說是這樣做的。 – Joe

1

您可以嘗試使用非打印字符 - 與工作都放在和PUTLOG創造 '空白' 的

data _null_; 
    x = '09'x !! '  Hello, world!'; 
    putlog x; 
run; 

其它方式您的日誌包括:

data _null_; 
    x = '09'x !! '  Hello, world!'; 
    put // x // '09'x; 
run; 

/可讓您添加空白行。

此外,您還可以通過添加一個破折號你的日誌爲NOTE /警告/錯誤的類板塊,具體如下:

data _null_; 
    put 'NOTE: '; 
    put 'NOTE- Check'; 
    put 'NOTE- This'; 
    put 'NOTE- Out!'; 
    put 'NOTE- '; 
run; 
3

所以,你可以使用@n指針控制,如果你只是想添加前導空格。

putlog @3 x ; 

如果要有條件地建立X使得其僅有時擁有領先的空間,那麼你可以使用$varying.格式。您需要定義一個具有您希望寫入的長度的變量,但不需要修改所用的格式。

166 data _null_; 
167 do i=3 to 1 by -1 ; 
168  x = substr(' Hello, world!',i); 
169  len = length(x); 
170  putlog x $varying80. len ; 
171 end; 
172 run; 

Hello, world! 
Hello, world! 
    Hello, world! 
1

我用@ Joe的答案,並從它建立。事實證明,+指針控件是動態的。也就是說,指針位置可以通過數據集變量來控制。當你不知道有多少空間時,這很有用。

211 data _null_; 
212 string   = '  Hello, world!'; 
213 len_string  = length(string); 
214 len_stripped = length(strip(string)); 
215 leading_spaces = len_string - len_stripped; 
216 
217 put len_string= len_stripped= leading_spaces= ; 
218 put; 
219 put +leading_spaces string; 
220 run; 

len_string=20 len_stripped=13 leading_spaces=7 

     Hello, world! 
NOTE: DATA statement used (Total process time): 
     real time   0.00 seconds 
     cpu time   0.00 seconds