我有一个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.;
数据步骤不需要它。你可以把它简化为.
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
非常有用。例如,您可能希望将前几个字符读取为字符串,然后对它们进行测试,并根据您发现的内容重新读取为数字或日期。