SAS使用infile导入txt文件 [英] SAS import txt file using infile
本文介绍了SAS使用infile导入txt文件的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我正在研究在SAS中导入两个txt文件的两个过程。第一个文件是固定宽度的。第二个txt文件是分隔文件。下面附加的SAS代码:
DATA filename; INFILE "filelocation"; INPUT VAR1 $1-11 VAR2 $13-16 @18 VAR3 MMDDYY10. VAR4 $29-53; INFORMAT VAR1 $11.; INFORMAT VAR2 $4.; INFORMAT VAR3 MMDDYY10.; INFORMAT VAR4 $25.; FORMAT VAR1 $11.; FORMAT VAR2 $4.; FORMAT VAR3 MMDDYY10.; FORMAT VAR4 $25.; ; RUN;
DATA filename; INFILE "filelocation" DELIMITER="|" MISSOVER DSD LRECL=32767; INFORMAT VAR1 $11.; INFORMAT VAR2 $4.; INFORMAT VAR3 MMDDYY10.; INFORMAT VAR4 $25.; FORMAT VAR1 $11.; FORMAT VAR2 $4.; FORMAT VAR3 MMDDYY10.; FORMAT VAR4 $25.; INPUT VAR1 $ VAR2 $ VAR3 VAR4 $ ; RUN;
我的问题是:
1.为什么在第一个过程中,"输入"位于代码的开头,而在第二个过程中,"输入"位于代码的最后?"输入"的顺序重要吗?
在第一个过程中,在VAR3前面有一个"@18",VAR3是一个表示日期的变量,它确定VAR3从位置18开始。是否所有变量都可以使用此表达式? 例如。 @1 VAR1$
@13 VAR2$
@18 VAR3 MMDDYY10。
@29 VAR4$;在步骤2中
输入 VAR1$
VAR2$
VAR3
VAR4$
为什么变量在"$"符号后没有任何数字来确定变量的长度?
谢谢!
推荐答案
您谈论的主要区别是存储在固定列位置的数据和分隔的数据之间的区别。由于您的第一个示例使用具有固定列位置的数据,因此您可以使用列范围(1-11
)来读取数据。对于带分隔符的数据,您不能指定固定的列(甚至不能指定要读取的固定长度),因为您不知道分隔符之间有多少个字符。相反,您必须使用列表模式输入,并且SAS将读取该值,直到下一个分隔符。
详细问题撞击吧。
- 为什么?因为程序就是这么写的。编写SAS代码的方式有很大的灵活性。
FORMAT
语句放在INPUT
语句之前,它可能会影响SAS创建的变量类型和它们在数据步骤中创建的顺序。
- 不,它们不一样。
VAR1 $ 1-11
时,您就是要求它读取第1到11列中的任何内容,包括任何嵌入的空格。它还知道您希望将VAR1定义为字符(因为您使用了$
),并且它应该有11个字节的空间。当您要求它读取@1 VAR1 $
时,它将读取它看到的从第一列开始的下一个单词。它将在第一个空白处停止。因此,如果列1到69为空,则它可以读取列1到5,或者它可以读取列70到77。它还会使VAR1的长度只有8(除非您之前定义了它),因为当SAS无法判断您需要不同的长度时,这是字符变量的默认长度。
原始程序使用@18 VAR3 MMDDYY10.
的原因是您需要指定信息格式,以便让SAS将数据中的文本正确转换为SAS用来表示该日期的数字,而您无法使用列范围执行此操作。
- 您不需要长度。您甚至不需要
$
,因为您已经定义了变量类型。
INFORMAT
语句具有副作用,除了用于转换正在读取的文本的Informat之外,还设置了变量的长度。如果确实要定义变量,则应该使用LENGTH
或ATTRIB
语句。
这篇关于SAS使用infile导入txt文件的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文