Как перенести мои данные в SAS, наблюдая за шагом данных - PullRequest
0 голосов
/ 03 сентября 2018

У меня есть база данных sas с чем-то вроде этого:

id birthday Date1    Date2
1  12/4/01  12/4/13  12/3/14
2  12/3/01  12/6/13  12/2/14
3  12/9/01  12/4/03  12/9/14
4  12/8/13  12/3/14  12/10/16

И я хочу данные в этой форме:

id Date     Datetype
1  12/4/01  birthday  
1  12/4/13  1   
1  12/3/14  2    
2  12/3/01  birthday  
2  12/6/13  1
2  12/2/14  2
3  12/9/01  birthday
3  12/4/03  1
3  12/9/14  2
4  12/8/13  birthday
4  12/3/14  1
4  12/10/16 2

Спасибо тебе за помощь, я на второй неделе пользуюсь sas <3 Редактировать: спасибо, оставайся мне, что я не нашел метод сортировки. </p>

Ответы [ 2 ]

0 голосов
/ 04 сентября 2018

Два шага

  • Поворот данных с помощью Proc TRANSPOSE.
  • Измените имена выходных столбцов и их метки с помощью PROC DATASETS

Пример кода

proc transpose 
  data=have 
  out=want
    ( keep=id _label_ col1)
  ;
  by id;
  var birthday date1 date2;
  label birthday='birthday' date1='1' date2='2' ; * Trick to force values seen in pivot;
run;

proc datasets noprint lib=work;
  modify want;
  rename 
    _label_ = Datetype
    col1 = Date
  ;
  label
    Datetype = 'Datetype'
  ;
run;

Порядок столбцов в выходной таблице TRANSPOSE:

  • переменные идентификатора
  • копировать переменные
  • _name_ и _label_
  • имена столбцов на основе данных

В примере 'want' показаны столбцы с именами данных перед столбцами _label_ / _name_. Единственный способ изменить основной порядок столбцов - переписать набор данных. Вы можете изменить то, как этот порядок воспринимается при просмотре, используя дополнительное представление данных или выходной Proc, который позволяет вам указать конкретный требуемый порядок.

0 голосов
/ 03 сентября 2018

Добрый день. Следующее должно быть то, что вы после. Я не придумал простой способ переименовать столбцы, поскольку они не находятся в начальных данных.

   /*Data generation for ease of testing*/
    data begin; 
        input id birthday $ Date1 $ Date2 $; 
        cards;
    1  12/4/01  12/4/13  12/3/14
    2  12/3/01  12/6/13  12/2/14
    3  12/9/01  12/4/03  12/9/14
    4  12/8/13  12/3/14  12/10/16
    ; run; 

   /*The trick here is to use date: The colon means everything beginning with date, comparae with sql 'date%'*/
    proc transpose data= begin out=trans; 
        by id; 
        var birthday date: ; 
    run;

    /*Cleanup. Renaming the columns as you wanted.*/
    data trans;
        set trans;
        rename _NAME_= Datetype COL1= Date;
    run; 

Подробнее с сайта Кентского университета

...