Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/powershell/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
不带列标题的Sas.dat文件仅在Sas studio中读取第一行_Sas - Fatal编程技术网

不带列标题的Sas.dat文件仅在Sas studio中读取第一行

不带列标题的Sas.dat文件仅在Sas studio中读取第一行,sas,Sas,我正在使用Sas studio大学版。我有一个dat文件,没有任何列标题(4列)。我正试着把它读进去 data van; infile "/folders/myfolders/test2/psek-win.dat"; input a $ b $ c $ d $; run; i、 e.为列创建我自己的名称。它可以工作,但只有第一行被读入。我怎样才能让它读所有的行呢?我一直在看youtube教程,但我被卡住了 编辑:这是输出 1 OPTIONS NONOTES

我正在使用Sas studio大学版。我有一个dat文件,没有任何列标题(4列)。我正试着把它读进去

data van;
    infile "/folders/myfolders/test2/psek-win.dat";
    input a $ b $ c $ d $;
run;
i、 e.为列创建我自己的名称。它可以工作,但只有第一行被读入。我怎样才能让它读所有的行呢?我一直在看youtube教程,但我被卡住了

编辑:这是输出

 1          OPTIONS NONOTES NOSTIMER NOSOURCE NOSYNTAXCHECK;
 57         
 58         data van;
 59             infile "/folders/myfolders/test2/psek-win.dat";
 60             input a $ b $ c $ d $;
 61         run;

 NOTE: The infile "/folders/myfolders/test2/psek-win.dat" is:
       Filename=/folders/myfolders/test2/psek-win.dat,
       Owner Name=sasdemo,Group Name=sas,
       Access Permission=-rw-rw-r--,
       Last Modified=05Jun2015:06:55:44,
       File Size (bytes)=1527

 NOTE: 1 record was read from the infile "/folders/myfolders/test2/psek-win.dat".
       The minimum record length was 1527.
       The maximum record length was 1527.
 NOTE: The data set WORK.VAN has 1 observations and 4 variables.
 NOTE: DATA statement used (Total process time):
       real time           0.01 seconds
       cpu time            0.01 seconds


 62         
 63         OPTIONS NONOTES NOSTIMER NOSOURCE NOSYNTAXCHECK;
 75      
编辑2: 我真的应该从一开始就包含此信息…抱歉: 我使用的是Windows 7,在Linux Redhat 64上通过VirtualBox运行Sas Studio。我意识到我使用的文件是针对Windows的。当我使用同一文件的Linux版本时,它可以正常工作


感谢大部分时间,如果SAS只读取一行,然后就好像在有多行时读取一样,那么行终止符(即,行尾字符)有问题

Windows使用CR+LF(
0D0A
),而Unix/Linux使用
0A
(LF),包括Mac OS X

这意味着,如果您在Windows计算机上,并且有一个以Unix终止的文件,它将被读入,就像它只有一行一样。另一种方式通常不是问题——你会得到一个额外的角色,这可能会造成一点混乱,但它仍然表现得好像它是正确的行数

您可以在datastep中通过指定指定正确的行终止符的选项来改变这一点。例如:

data van;
    infile "/folders/myfolders/test2/psek-win.dat" termstr=lf;
    input a $ b $ c $ d $;
run;

将指示SAS考虑一个简单的行输入为行终止符。

< P>我意识到我使用的文件是Windows的。当我使用同一文件的Linux版本时,它可以正常工作。感谢您的帮助

您在日志中看到了什么?您确定这是SAS数据集吗?对于Windows操作系统,在SAS8之后,SAS数据文件是.sas7bdat,如果是SAS数据,则可以直接读取,无需填充和输入。添加输出,我回家后将尝试下面提出的解决方案。谢谢@LXandor只是想澄清一下,1527是该文件的预期线宽,还是您希望的更短一些?你能用你的操作系统更新吗?当你用记事本等打开文件时,你会看到多行吗?或者你有不同的理由相信这些行在那里吗?请注意,大学版是在虚拟机中运行的,所以我不会假设你在本地运行的操作系统等同于虚拟机运行的操作系统。我认为虚拟机运行的是Linux,但SAS可能会对工作方式进行一些更改,以适应Windows用户。我认为你是对的。我记得用大学版写的csv文件在记事本中查看时,不会显示换行符。这大概是因为记事本寻找CR,LF。事实上,我有点不确定,因为我的直觉是它应该是向后的。如果该文件源于Windows并在Linux SAS UE中运行,那么它应该有换行符(只是额外的CR垃圾)。所以有点奇怪。但是我从来没有见过这个问题(只在一行中读取)除了坏的TERMSTR之外还有其他来源。所以他可能需要
TERMSTR=crlf
在unix机器上读取windows文件?嗯,是的,从技术上讲,但问题是如果你在*nix机器上读取windows文件,它仍然会读取正确的行数(因为有LF)。仅行上的最后一个字段将被作为常规字符读入的CR字符损坏。这不是OP报告的内容-事实上,相反的内容与OP报告的内容(在Windows机器上读取*nix创建的文件)是一致的。