SAS输入声明

时间:2016-07-20 16:11:12

标签: encryption passwords sas

我有一个autoexec文件,当我连接到不同的服务器时会加密我的密码......代码如下所示:

%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.;

1 个答案:

答案 0 :(得分:2)

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

rows

使用data _null_ ; infile ewspwdfl obs=1 TRUNCOVER ; input line1 $CHAR1024. ; call symputX('ewspwd',line1); call symputX('wspwd',‘XXXXXXXX’) ; run ; 是一种创建程序的好方法,您希望使用不同的输入语句读取不同的行。您可以测试input @变量的内容,并根据读取的内容执行数据步骤的不同部分。

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

如果要将相同的列重新读入不同的变量,INPUT @非常有用。例如,您可能希望将前几个字符作为字符串读取,然后根据您重新读取的数字或日期对它们进行测试。