2016-05-16 2 views
1

У меня есть данные, как показано ниже в текстовом файле.Разделить текстовый файл на 3 набора данных/Таблицы

Как отделить текстовый файл от 3 наборов данных/таблиц?

1 с данными о доходах, 2-й с данными об погашении, 3-й с данными об истечении срока действия. у каждого из них много строк, я только что упомянул только 3-4 строки для каждого из них. Я пытаюсь использовать заявление Infile, но не знаю, как разделить. Вот мысль: во-первых, будут считываться исходные данные (earnings), и всякий раз, когда sas идентифицирует слово redemptions, он должен остановиться, и остальная часть данных должна перейти во второй набор данных, и всякий раз, когда sas идентифицирует слово Expirations, данные ниже этого ключевого слова должен перейти к 3-му набору данных. Какие-либо предложения ?

Earnings 
abc 123 xyz abjjdd 
bhb edw ajd jnjnjknn 
ebc ecc cec cecekckk 
.... 
redemptions 
abc 123 xyz abjjdd 
bhb edw ajd jnjnjknn 
ebc ecc cec cecekckk 
Expirations 
abc 123 xyz abjjdd 
bhb edw ajd jnjnjknn 
ebc ecc cec cecd ccsdc 
djc c djc cjdcjjnc 

ответ

1

Использование переменной сохранения поможет вам достичь этого.

Используя приведенный ниже код, просто замените datalines в инструкции infile с именем файла и задайте правильные параметры infile.

data rawImport; 
    infile datalines dsd delimiter=' ' truncover; 
    informat C1-C4 $32.; 
    input C1-C4; 
    datalines; 
Earnings 
abc 123 xyz abjjdd 
bhb edw ajd jnjnjknn 
ebc ecc cec cecekckk 
Redemptions 
abc 234 xyz abjjdd 
bhb edw ajd jnjnjknn 
ebc ecc cec cecekckk 
Expirations 
abc 345 xyz abjjdd 
bhb edw ajd jnjnjknn 
ebc ecc cec cecd ccsdc 
djc c djc cjdcjjnc 
; 

Используя переменную удержания, мы можем теперь отправлять строки в соответствующие наборы данных.

data Earnings Redemptions Expirations; 
    set rawImport; 
    length outputDS $ 12; 
    retain outputDS; 

    * Determine output dataset; 
    if C1 = "Earnings" then do; 
    outputDS = "Earnings"; 
    delete; 
    end; 
    else if C1 = "Redemptions" then do; 
    outputDS = "Redemptions"; 
    delete; 
    end; 
    else if C1 = "Expirations" then do; 
    outputDS = "Expirations"; 
    delete; 
    end; 

    * output to appropriate dataset; 
    if outputDS = "Earnings" then output Earnings; 
    else if outputDS = "Redemptions" then output Redemptions; 
    else if outputDS = "Expirations" then output Expirations; 

    drop outputDS; 
run; 

Log теперь показывает:

NOTE: There were 13 observations read from the data set WORK.RAWIMPORT. 
NOTE: The data set WORK.EARNINGS has 3 observations and 4 variables. 
NOTE: The data set WORK.REDEMPTIONS has 3 observations and 4 variables. 
NOTE: The data set WORK.EXPIRATIONS has 4 observations and 4 variables. 
Смежные вопросы