Проблема SAS в программировании при использовании разделителя данных * - PullRequest
0 голосов
/ 10 апреля 2020

Я пытаюсь определить, используя данные в файле products.txt, набор данных с разделителем *. products.txt data:

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 изменяет пространство на,. я хочу команду для изменения пробела в *

Ответы [ 2 ]

0 голосов
/ 10 апреля 2020

К отображение пропущенные цифры c значения в виде звездочки (*), в средствах просмотра или просмотра данных используйте эту настройку

OPTIONS MISSING='*';

INFILE DLM= опция для указания того, какие символы в файле данных должны использоваться для разделения переменных: INPUT.

DLM НЕ указывает заменяющее значение для пропущенных значений.

Вы сказали SAS использовать * в качестве разделителя полей.

Так что же происходит? ЛОГ скажет вам. По сути, Nume считывалось как 8-символьная переменная (длина по умолчанию), а разделитель никогда не появлялся. Так, Pret, переменная цифра c, нечего было читать, и ей было присвоено пропущенное значение. При просмотре в выводе или в средстве просмотра данных значение отображается как ..

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

По умолчанию, что отображается при отсутствии значения?

  • Число c переменных, . или текущая настройка для опции сеанса MISSING="<one-char>"
  • Символьные переменные, . Отсутствующее значение для символьных переменных - один пробел.
0 голосов
/ 10 апреля 2020

Опция DSD, в дополнение к другим функциям, изменяет разделитель DEFAULT с пробела на запятую. Но вы можете переопределить разделитель по умолчанию для любого списка символов, который вы хотите, используя опцию DLM = (также известную как DELIMITER =), независимо от того, используете ли вы опцию DSD.

Из комментариев это звучит как Вы просто хотите сделать текстовые манипуляции. Просто поменяйте местами звезды. Убедитесь, что вы удалили все пробелы (если вы не хотите, чтобы они тоже стали звездами).

data _null_;
  infile '/home/u47505185/produse.txt';
  input;
  file '/home/u47505185/produse_star.txt';
  _infile_=translate(trimn(_infile_),'*',' ');
  put _infile_;
run;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...