如何删除 SAS 中双引号导致的额外 space

How to remove the extra space as a result of double quotes in SAS

我是 SAS 的新手,我正在尝试通过 SAS 程序创建批处理文件。代码如下:

data new;
enddate=date();
getdate=date()+1;
flname1=compress("d:\temp\file"||year(enddate)||put(month(enddate),z2.)||
   put(day(enddate),z2.)||".txt");
begdate=enddate-&days;
dtline1=compbl(compress("00:00_"||put(begdate,mmddyy10.))||" "||
compress("00:00_"||put(getdate,mmddyy10.)));
file 'h:\programs\daily_file';
put 'LOGIN abc xyz';
put 'FILE(C:\temp\list.txt) 
dtline1 "script.pl("flname1")";
put 'LOGOUT';

Script.pl 是一个 perl 脚本,在生成的批处理文件中,在 flname1 之后有一个额外的 space。它打印出如下内容:

script.pl(d:\temp\file_date ).

我不想要这个额外的 space 日期。我能做什么?

让它正常工作的最简单方法就是将整个命令 (script.pl(filename)) 放入一个变量中,然后放入该变量。

您也可以在 put 中使用 +(-1) 将线指针向后移动一个,如果它一直偏离一个(尽管大多数时候不需要)。

put "script.pl(" flname1 +(-1) ")";

在写入文件之前创建字符串变量看起来真的很辛苦。您应该能够使用 PUT 语句的功能编写您想要的内容。从问题中不清楚您希望文件具有什么格式,但我认为这段代码模仿了您的程序。

%let days=7 ;
data new;
  enddate=date();
  getdate=date()+1;
  begdate=enddate-&days;
  file 'h:\programs\daily_file';
  put 'LOGIN abc xyz'
    / 'FILE(C:\temp\list.txt) 00:00_' begdate mmddyy10. 
      ' 00:00_' getdate mmddyy10. 
      ' script.pl(d:\temp\file' enddate yymmddn8. '.txt)'
    / 'LOGOUT'
  ;
run;

它产生:

LOGIN abc xyz
FILE(C:\temp\list.txt) 00:00_08/14/2015 00:00_08/22/2015 script.pl(d:\temp\file20150821.txt)
LOGOUT