2015-07-24 3 views
0

Я работаю с несколькими волнами данных опроса. Я закончил определение форматов и меток для первой волны данных.Атрибуты экспорта/импорта набора данных SAS

Вторая волна данных будет отличаться, но коды, метки, форматы и имена переменных будут одинаковыми. Я не хочу снова определять все эти атрибуты ... Кажется, должен быть способ экспортировать информацию PROC CONTENTS для одного набора данных и импортировать его в другой набор данных. Есть ли способ сделать это?

Самое близкое, что я нашел, это PROC CPORT, но я полностью смущен этим и не могу заставить его работать.


(Просто чтобы быть ясно, что я буду задавать вопрос другим способом, а также ...)

При запуске PROC СОДЕРЖАНИЯ, SAS говорит вам, что формат, этикетки и т.д., это используется для каждая переменная в наборе данных.

У меня есть второй набор данных с теми же именами переменных. Я хотел бы использовать атрибуты переменной из первого набора данных для переменных во втором наборе данных. Есть какой-либо способ сделать это?

Спасибо!

+0

Что вы имеете в виду, используя переменные атрибуты из первого набора данных на втором? Это на этапе импорта proc, чтобы применить форматы/метки к окончательному набору данных? – Reeza

ответ

0

Добро пожаловать в стек.

Если вы хотите, чтобы скопировать свойства таблицы без данных в нем, вы могли бы использовать PROC SQL или шаг данных с нулевыми строк читать.

Эти примеры копирует всю информацию о наборе данных SASHELP.CLASS в новый набор данных. Все форматы, атрибуты, ярлыки, все это копии. Если вы хотите только скопировать некоторые из столбцов, укажите их в предложении select вместо asterix.

PROC SQL outobs=0; 
    CREATE TABLE WANT as SELECT * FROM SASHELP.CLASS; 
QUIT; 

С уважением, Vasilij

1

Так у вас есть модель набора данных и набора данных HAVE, как с данными в них. Вы хотите создать набор данных WANT, у которого есть данные от HAVE, с атрибутами MODEL (форматы, метки и переменная длина). Вы можете сделать это, как:

data WANT ; 
    if 0 then set MODEL ; 
    set HAVE ; 
run ; 

Это работает, потому что, когда шаг DATA компилирует, SAS строит данные программы Vector (PDV), который определяет переменные атрибуты. Несмотря на то, что SET MODEL никогда не выполняется (поскольку 0 не является истиной), все переменные в MODEL создаются в PDV при компиляции шага.

Важно отметить, что если имеются соответствующие переменные с разной длиной, длина от MODEL будет определять длину переменной в WANT. Поэтому, если HAVE имеет переменную, которая больше, чем одноименная переменная в MODEL, она может быть усечена. Опции VARLENCHK определяет, будет ли SAS вызывать предупреждение/ошибку, если это произойдет.

Предполагается, что в наборе данных HAVE нет форматов/меток. Если в HAVE есть переменная, которая имеет формат/метку, а соответствующая переменная в MODEL не имеет формата/метки, формат/метка от HAVE будет применен к WANT.

Пример кода ниже.

data model; 
    set sashelp.class; 
    length FavoriteColor $3; 
    FavoriteColor="Red"; 
    dob=today(); 
    label 
    dob='BirthDate' 
    ; 
    format 
    dob mmddyy10. 
    ; 
run; 

data have; 
    set sashelp.class; 
    length FavoriteColor $10; 
    dob=today()-1; 
    FavoriteColor="Orange"; 
    label 
    Name="HaveLabel" 
    dob="HaveLabel" 
    ; 
    format 
    Name $1. 
    dob comma. 
    ; 
run; 

options varlenchk=warn; 

data want; 
    if 0 then set model; 
    set have; 
run; 
1

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

Создайте несколько примеров данных для второго раунда данных:

data new_data; 
    age = 10; 
run; 

Создание пустого набора данных на основе исходных данных:

proc sql noprint; 
    create table want like sashelp.class; 
quit; 

Добавляет данные в пустой набор данных, сохраняя при этом детали от оригинала:

proc append base=want data=new_data force nowarn; 
run; 

Обратите внимание, что я использовал force и nowarn на proc append. Это обеспечит добавление данных, даже если между двумя используемыми наборами данных обнаружены различия. Это ожидается, если у вас есть, например, различия в форматах. Он также будет скрывать такие вещи, как если бы столбы существовали в новой таблице, которые не находятся в старой таблице и т. Д. Поэтому будьте осторожны, чтобы это делало то, что вы хотите. Если поведение нежелательно, попробуйте использовать вместо него файл datastep (и сначала укажите набор данных want).

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