Как манипулировать файлами sas7bdat? - PullRequest
0 голосов
/ 06 августа 2020

Я работаю с ошибочно созданным файлом sas7dbat и пытаюсь его исправить. Когда файл был создан, все данные вводились в один столбец, а не в несколько столбцов, и я не могу понять, как это сделать. Я думал, что смогу использовать infile и сделать dlm "|" с помощью dsd, чтобы удалить кавычки в столбце имени, но кажется, что эта проблема сложнее, чем кажется. имена. Вот как это выглядит в SAS:

SAS7dbat

А вот данные на случай, если они понадобятся:

1 0017 | 2020-04 -09 | «Джейсон Нгуен» | 122L | 500.0 | $ 404,82

2 0017 | 2020-04-09 | «Джейсон Нгуен» | 407XX | 100.0 | 201,95 $

3 0177 | 2020-04 -05 | "Гленда Джонсон" | 144L | 100.0 | $ 91.01

4 0177 | 2020-04-05 | "Гленда Джонсон" | 188X | 100.0 | $ 70.76

5 0177 | 2020-04 -05 | "Гленда Джонсон" | 733 | 2.0 | $ 101 230.00

6 0177 | 2020-04-05 | "Гленда Джонсон" | 777 | 5.0 | $ 106.29

7 1843 | 2020-04 -03 | "Джордж Смит" | 122 | 100.0 | $ 60.64

8 1843 | 2020-04-03 | "Джордж Смит" | 122L | 10.0 | 303.18 $

9 1843 | 2020-04 -03 | "Джордж Смит" | 144L | 50.0 | $ 91.01

10 1843 | 2020-04-03 | "Джордж Смит" | 188S | 3.0 | 52 629,48 $

11 1843 | 2020-04 -03 | "Джордж Смит" | 855W | 1.0 | 92210,41 $

12 1843 | 2020-04-03 | "Джордж Смит" | 908X | 1.0 | $ 51 920,87

13 9888 | 2020-04 -11 | "Шарон Лу" | 100 Вт | 1000,0 | $ 20,14

14 9888 | 2020-04-11 | "Ша ron Lu "| 122 | 50.0 | $ 60.64

(каждая строка представляет собой один столбец внутри SAS)

1 Ответ

0 голосов
/ 06 августа 2020

Go назад и исправление кода импорта было бы моим предложением, в противном случае используйте функцию SCAN ().

data want;
set have;


var1 = scan(variableName, 1, '|');
var2 = input(scan(variableName, 2, '|'), yymmdd.);
format var2 date9.;
var3 = dequote(scan(variableName, 3, '|'));

....

run;

Другой вариант - записать файл как есть обратно в текстовый файл, а затем импортировать это с помощью DLM = '|' option.

Непроверено:

proc export data=have outfile='myfile.txt' dbms=dlm replace;
delimiter='';
run;

proc import out=want datafile='myfile.txt' dbms=dlm replace;
delimiter='|';
run;

Учитывая, что это всего лишь 6 переменных, хотя вы в любом случае можете написать шаг данных для этого кода.

...