输出字符串,带有前导空格以记录空格

时间:2017-03-31 19:23:50

标签: sas

如何在日志中打印前导空格?

当我做

之类的事情时
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

4 个答案:

答案 0 :(得分:4)

因此,如果您只想添加前导空格,可以使用@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 :(得分:2)

使用+2(或多长时间)与put(但不是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;

答案 2 :(得分:1)

您可以尝试使用不可打印的字符 - 同时使用put和putlog

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

在日志中创建“空白”的其他方法包括:

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

/可让您添加空行。

此外,您可以通过添加短划线将日志的各个部分分类为NOTE / WARNING / ERROR,如下所示:

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

答案 3 :(得分: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