使用数据分隔符时的SAS编程问题*



我正试图使用products.txt文件中的数据定义一个带有分隔符*的数据集。products.txt数据:

hartie 2 birotica
creione 10 birotica
apa 6 alimente
ceai 8 alimente
tricou 100 haine 

我尝试使用分隔符*:

data produse;
infile '/home/u47505185/produse.txt' dlm='*';
input Nume $ Pret Categorie $;
run;

dsd命令正在将空格更改为。我想要将空间更改为*的命令

DSD选项除了执行其他操作外,还将DEFAULT分隔符从空格更改为逗号。但是,无论是否使用DSD选项,都可以使用DLM=(也称为delimiter=(选项将默认分隔符覆盖为所需的任何字符列表。

从评论中,听起来你只是想做文本操作。只要把空格改成星星就行了。请确保删除任何尾随空格(除非您希望这些空格也成为星形(。

data _null_;
infile '/home/u47505185/produse.txt';
input;
file '/home/u47505185/produse_star.txt';
_infile_=translate(trimn(_infile_),'*',' ');
put _infile_;
run;

在输出或数据查看器中将缺少的数值显示为星号(*(,请使用此设置

OPTIONS MISSING='*';

INFILEDLM=选项用于指定数据文件中用于分隔INPUT变量的字符。

DLM没有为丢失的值指定替换值。

您告诉SAS使用*作为字段分隔符。

那么发生了什么呢?日志会告诉你。从本质上讲,Nume被读取为一个8个字符的变量(默认长度(,并且分隔符从未出现。因此,Pret,一个数字变量,没有任何可读取的内容,并且被分配了一个缺失的值。在输出或数据查看器中查看时,该值显示为.

data want;
infile datalines dlm='*';  * '/home/u47505185/produse.txt' dlm='*';
input Nume $ Pret Categorie $;
datalines;
hartie 2 birotica
creione 10 birotica
apa 6 alimente
ceai 8 alimente
tricou 100 haine 
;

记录

25   data want;
26       infile datalines dlm='*';  * '/home/u47505185/produse.txt' dlm='*';
27       input Nume $ Pret Categorie $;
28   datalines;
NOTE: Invalid data for Pret in line 30 1-80.
RULE:      ----+----1----+----2----+----3----+----4----+----5----+----6----+----7----+----8----+--
31         apa 6 alimente
NOTE: Invalid data errors for file CARDS occurred outside the printed range.
NOTE: Increase available buffer lines with the INFILE n= option.
Nume=hartie 2 Pret=. Categorie=apa 6 al _ERROR_=1 _N_=1
NOTE: Invalid data for Pret in line 33 1-80.
NOTE: LOST CARD.
34         ;
NOTE: Invalid data errors for file CARDS occurred outside the printed range.
NOTE: Increase available buffer lines with the INFILE n= option.
Nume=ceai 8 a Pret=. Categorie=  _ERROR_=1 _N_=2
NOTE: SAS went to a new line when INPUT statement reached past the end of a line.
NOTE: The data set WORK.WANT has 1 observations and 3 variables.
NOTE: DATA statement used (Total process time):
real time           0.01 seconds
cpu time            0.00 seconds

默认情况下,当值丢失时,会向您显示什么?

  • 数值变量,.或会话选项MISSING="<one-char>"的当前设置
  • 字符变量,。字符变量缺少的值是一个空格

最新更新