Sas 输出字符串,其中包含要记录的前导空格,保留空格
如何将前导空格打印到日志中 当我做这样的事情时Sas 输出字符串,其中包含要记录的前导空格,保留空格,sas,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
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
我仔细看了一遍,但什么也看不出来。似乎使用一种格式(如)可能会起作用。然而,这需要提前知道字符串的长度
我希望日志输出如下所示:
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
(或无论多长)与put(但不是putlog)一起使用
使用putlog
时,您必须:
使用+2
(或无论多长)与put(但不是putlog)一起工作
使用putlog
时,您必须:
您可以尝试使用不可打印的字符-同时适用于put和putlog
data _null_;
x = '09'x !! ' Hello, world!';
putlog x;
run;
在日志中创建“空白”的其他方法包括:
data _null_;
x = '09'x !! ' Hello, world!';
put // x // '09'x;
run;
/
允许您添加一个空行
此外,您还可以通过添加破折号将日志的部分分类为注释/警告/错误,如下所示:
data _null_;
put 'NOTE: ';
put 'NOTE- Check';
put 'NOTE- This';
put 'NOTE- Out!';
put 'NOTE- ';
run;
您可以尝试使用不可打印的字符-同时适用于put和putlog
data _null_;
x = '09'x !! ' Hello, world!';
putlog x;
run;
在日志中创建“空白”的其他方法包括:
data _null_;
x = '09'x !! ' Hello, world!';
put // x // '09'x;
run;
/
允许您添加一个空行
此外,您还可以通过添加破折号将日志的部分分类为注释/警告/错误,如下所示:
data _null_;
put 'NOTE: ';
put 'NOTE- Check';
put 'NOTE- This';
put 'NOTE- Out!';
put 'NOTE- ';
run;
因此,如果只想添加前导空格,可以使用@n指针控件
putlog @3 x ;
如果要有条件地构建X,使其仅在某些情况下具有前导空格,则可以使用$variable.
格式。您需要定义一个具有希望写入长度的变量,但无需修改所使用的格式
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!
因此,如果只想添加前导空格,可以使用@n指针控件
putlog @3 x ;
如果要有条件地构建X,使其仅在某些情况下具有前导空格,则可以使用$variable.
格式。您需要定义一个具有希望写入长度的变量,但无需修改所使用的格式
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!
我使用了@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
我使用了@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
需要明确的是,@
既没有打印任何内容,也不是不可打印的字符-它是一个指针控件,但它避免了编译器/解析器认为putlog
是一个名为putlog
的变量,而不是一个语句/函数[因为putlog+2
如果是,它将是一个合法的SAS语句]。(虽然put
显然作为一个语句/函数获得了优先级,putlog
没有获得那个级别的首选项。可能是因为它较新,所以避免了向后兼容性问题。)没有真正解决输出变量中前导空格的问题。@Tom你为什么这么说?对我来说确实如此。或者你的意思是当变量本身包含空格时。我想没有,但这似乎不是一个重要的问题。H
应该在第5列,因为你跳过了two空格,变量有两个前导空格,但它在第3列中。需要明确的是,@
既不打印任何内容,也不是不可打印的字符-它是指针控件,但它避免了编译器/解析器认为putlog
是名为putlog
的变量,而不是语句/函数[因为putlog+2
如果是的话将是一个合法的SAS语句)。(虽然put
显然作为一个语句/函数获得了优先权,putlog
没有获得那个级别的优先权。大概是因为它比较新,所以避免了向后兼容性问题。)没有真正解决输出变量中前导空格的问题。@Tom你为什么这么说?对我来说确实如此。或者你的意思是当变量本身包含空格时。我想没有,但这似乎不是一个重要的问题。H
应该在第5列,因为你跳过了two空格,变量有两个前导空格,但它在第3列中。