2017-03-31 95 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 
相关问题