Я хочу загрузить файл «.txt» в SAS, чтобы я мог искать в содержимом определенные символы и слова для анализа. Рассматриваемый текстовый файл плохо отформатирован, поэтому в идеале было бы иметь один столбец, в котором каждое слово было бы новым наблюдением, например:
TEXT
1 Hello
2 World
В настоящее время я загружаю файл в SAS, но там много пробелов и несколько слов для каждого наблюдения.
data mylib.textimport;
infile "../TEXTTEST.txt" dlm = "' ', ',', '.'";
input __text__ $char300. ;
run;
Может ли кто-нибудь помочь мне поместить каждое новое слово в новую колонку?
Заранее спасибо. :)
Что вы имеете в виду под «помещением слов в столбцы»?


Я бы записал символы, которые вы хотите, в пробелы, а затем перебрал бы оставшиеся, выводя каждое слово.
Вот некоторые тестовые данные
data have;
format line $200.;
input ;
line = _infile_;
datalines;
This is some, test.text
How,about,this cheesey.cheese?
;
run;
Вот шаг DATA для просмотра и вывода того, что вы ищете:
data want(keep=word);
format word $200.;
set have;
line = translate(line," ",",."); /*convert , and . to space*/
n = countw(line);
/*Loop through the words and output*/
do i=1 to n;
word = scan(line,i);
output;
end;
run;
TRANSLATE преобразует символы третьего аргумента в символы второго. Это строки как массива. Он выполняет эту замену для каждого значения в массиве.
Как показывает этот пример, вы, вероятно, захотите подумать о других знаках препинания.
Если вы хотите прочитать файл «слово за словом», просто сообщите SAS, какие символы вы считаете разделителями, и используйте опцию FLOWOVER для чтения слов. Итак, если вы хотите рассматривать пробелы, запятые, точки, кавычки, табуляции, переводы строк и возврат каретки как разделители слов, ваша программа могла бы выглядеть так.
data want;
dlm=' ,."''' || '090A0D'x;
infile "../TEXTTEST.txt" dlm=dlm flowover;
length word $300 ;
input word @@ ;
run;
flowover - это поведение infile по умолчанию, поэтому оно также работает без его явного указания.
Какое отношение этот вопрос имеет к SQL?