2016-07-21 2 views
0

У меня есть большой текстовый файл и он содержит 3 таблицы. Записи в файле несортированы, записи в файле соответствуют имени столбца, разделенному пробелом. Таблицы повторяются до конца. Я хочу импортировать данные из этого файла блокнота в правильной таблице в SAS. Я хочу прочитать записи и имена столбцов из текстового файла и поместить их в правильную таблицу. В SAS. Я пробовал через INFILE, и мне удалось импортировать данные в SAS, но поскольку столбцы являются несортированными и таблицы повторяются, поэтому сложнее сохранить записи в правильной таблице в SAS. Я новичок в SAS, любая помощь будет очень признательна.Импортировать несортированные данные из файла блокнота (.txt) в SaS

Ниже приведен пример данных в текстовом файле

ABCD - ABCD   ----  Table 1                   

Column1   xxxxxxxxxxxxxxxxxxx      Column3 xxxxxxxxxxxx             
Column2   x          Column4 xx 

    ABCD - ABCD   ----  Table 2                  

Column1   xxxxxxxxxxxxxxxxxxx      Column3 xxxxxxxxxxx             
Column2   x          Column4 xx 

    ABCD - ABCD   ----  Table 3                  

Column1   xxxxxxxxxxxxxxxxxxx      Column3 xxxxxxxxxxxxxxx             
Column2   x          Column4 xx 

    ABCD - ABCD   ----  Table 1                   

Column1   xxxxxxxxxxxxxxxxxxx      Column3 xxxxxxxxxxxxxx             
Column2   x          Column4 xx 

    ABCD - ABCD   ----  Table 2                   

Column1   xxxxxxxxxxxxxxxxxxx      Column3 xxxxxxxxxxxxxxxxxx             
Column2   x          Column4 xx 

    ABCD - ABCD   ----  Table 3                   

Column1   xxxxxxxxxxxxxxxxxxx      Column3 xxxxxxxxxxxxxxxxxxxx            
Column2   x          Column4 xx 
+0

Необходимо указать пример нужного результата. Вероятно, вам также необходимо уточнить, какие части этого файла вы хотите читать как данные. Вы знаете имена переменных заранее? – Tom

+0

Я пытаюсь импортировать текстовый файл с несортированными данными. Столбец и данные для столбца находятся в одной строке, разделенной пробелом ''. Есть около 100 столбцов. Таблицы повторяются с одинаковыми именами столбцов, но с разными данными до конца файла. В приведенном выше примере показан входной файл, и мне нужен вывод в правильной форме таблицы в SAS. –

+0

Этот TXT-файл, похоже, является дампом системной системы. Существуют ли другие типы форматов, такие как XML/JSON с теми же данными, что и этот файл, немного похожи на структуру типа дерева? – Parfait

ответ

1

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

data step1 ; 
    infile 'myfile.txt' truncover ; 
    input @; 
    * eliminate blank lines ; 
    if _infile_ = ' ' then delete; 
    * Read the TABLE name ; 
    if substr(_infile_,23,6) = ' ---- ' then do; 
    block+1; 
    input @33 table_name $32.; 
    retain table_name; 
    delete; 
    end; 
    else do; 
    * Read two values from each line ; 
    input @2 varname $20. value $50. @; 
    output; 
    input @59 varname $20. value $50. ; 
    output; 
    end; 
run; 

Затем вы можете добавить шаги для сортировки и транспонирования.

proc sort data=step1 out=step2; 
    by table_name block varname ; 
run; 
proc transpose data=step2 out=step3; 
    by table_name block; 
    id varname; 
    var value; 
run; 
+0

input @ 2 varname $ 20. значение 50 долларов США. @; выход; Почему это «@» необходимо в конце инструкции ввода? Я смущен, почему вам нужно @, когда вы не указываете свой оператор ввода – DukeLuke

+1

Trailing @ используется так, чтобы SAS сохраняла строку для следующего оператора INPUT. Таким образом, программа может использовать одни и те же имена переменных при чтении как левого, так и правого столбцов отчета. По той же причине в первом операторе INPUT был выполнен трейлинг @. – Tom

+0

Спасибо. Имеет ли это тот же эффект, что и @@? – DukeLuke

Смежные вопросы