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

时间:2015-08-21 18:42:31

标签: perl sas batch-processing

我是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后面有一个额外的空格。它打印的内容如下:

  

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

我不希望这个额外的空间在日期之后。我该怎么办?

2 个答案:

答案 0 :(得分:3)

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

你也可以使用put中的+( - 1)将线指针向后移动一个,如果它一直偏离一个(尽管大部分时间不需要)。

public, max-age=3600

答案 1 :(得分:0)

在写入文件之前,您似乎很难创建字符串变量。您应该能够使用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