我有一个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.;
答案 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 @
非常有用。例如,您可能希望将前几个字符作为字符串读取,然后根据您重新读取的数字或日期对它们进行测试。