2016-07-20 69 views
0

我有我的加密当我连接到不同的服务器密码的自动执行文件....代码如下所示:SAS输入语句

%global wspwd ewspwd hpwd ehpwd ; 

/* Enter WORKSTATION Password Below */ 
filename ewspwdfl "/home/&sysuserid./ewspwd.txt" ; 
proc pwencode in=’XXXXXXXX’ out=ewspwdfl ; run ; 
data _null_ ; 
    infile ewspwdfl obs=1 length=l ; 
    input @ ; 
    input @1 line1 $varying1024. l ; 
    call symput('ewspwd',cats(substr(line1,1,l))) ; 
    call symput('wspwd',cats(‘XXXXXXXX’)) ; 
run ; 

我的问题是:为什么是

input @ ; 

包括为什么

input @1 line1 $varying1024. l ; 

是不够的。

每当我用SAS创建数据集时,我从来不必包含“input @;”在我的发言中。我只是简单地写了一些内容:

input @1 firstname $ @15 lastname $ @30 date mmddyy6.; 
+0

为什么你认为这是必要的?你尝试删除它,并做到这一点,使其无法正常工作?它以什么方式不起作用? – Tom

+0

我有这样的设置......我想我不需要它,但我不确定所有依赖此autoexec文件的意外情况,所以我没有改变任何东西。我曾经谈过的人不知道它的目的...... – DukeLuke

+0

你需要它来获得一些INFILE选项来填充。如FILENAME =选项或EOV =选项。但我不认为你需要它用于你的代码使用的LENGTH =选项。 – Tom

回答

2

您并不需要它用于该数据步骤。你可以简化它。

data _null_ ; 
    infile ewspwdfl obs=1 TRUNCOVER ; 
    input line1 $CHAR1024. ; 
    call symputX('ewspwd',line1); 
    call symputX('wspwd',‘XXXXXXXX’) ; 
run ; 

使用input @是创建要读取使用不同的输入语句不同的线路方案的好方法。您可以测试_infile_变量的内容,并根据读取的内容执行数据步骤的不同部分。

在INFILE语句中使用EOV =选项来检测何时开始从新文件读取数据时也很有用,因为在开始读取新文件之前它没有设置。因此,INPUT @会让SAS开始读取,以便设置EOV变量,但会保持该行等待您的实际INPUT语句稍后读取。

如果您想要将相同的列重新读入不同的变量,则@1非常有用。例如,您可能需要将前几个字符作为字符串读取,然后对其进行测试,并根据您发现的重新读取的数字或日期进行测试。

+0

“使用输入@是创建程序的好方法,您可以使用不同的输入语句来读取不同的行。”是指格式化,列,列表和名称输入? – DukeLuke

+0

让你在这个最近的问题中编写一些阅读复杂垃圾的代码是有用的。 https://stackoverflow.com/questions/38503002/import-unsorted-data-from-a-notepad-file-txt-into-sas – Tom