Линейные графики SAS из данных в строке, а не в столбце

Я искал, но ни одна информация не показывает, как построить линейный график на основе данных, представленных в строке, а не в столбце.

У меня есть данные в этой форме:

Firstname Lastname Sep Oct Nov Dec Jan Feb March April May June July

Есть 100 строк данных с отдельными людьми. Я должен построить каждый график для каждого человека, начиная с сентября по июль. Мой вывод будет 100 отдельных графиков. Я знаю, как построить график, если данные находятся в столбце, но это не то, что мне дано. Изменение данных потребует слишком много работы. У меня нет кодов sas для строк:

**Proc sgplot data=data1;
series x=??? ( i need mths from Sep to July here)
Series y= ?? (will be the marks from the Sep to July) 
Run;**

Вот как должен выглядеть результат:


person confused programmer    schedule 05.11.2018    source источник
comment
Вы правы, вам нужны данные в столбце, а не в строке для построения графика. Используйте PROC TRANSPOSE для переформатирования данных. Не уверен, что вы имеете в виду под слишком большим объемом работы, но в конечном итоге это не выбор.   -  person Reeza    schedule 05.11.2018
comment
шаг данных: stats.idre.ucla.edu/sas/modules/ proc transpose: stats.idre.ucla.edu/sas/modules/   -  person Reeza    schedule 05.11.2018
comment
Формируйте данные так, чтобы они соответствовали инструменту - даже если они поступают из удаленных данных, таких как веб-таблица, таблица Excel или файл извлечения. Взаимодействие с широким набором данных с помощью столбцов календаря на самом деле будет более проблематичным, если вам придется работать с несколькими годами или годами, пересекающими месяцы.   -  person Richard    schedule 05.11.2018


Ответы (1)


Ваша таблица должна быть в плоском формате, например:

FirstName LastName Date

John      Smith    01JAN2018
Jane      Doe      01JAN2018

Это можно сделать с помощью PROC TRANSPOSE.. Лучше всего согласовать ваши даты с конкретным годом / датой. Это сохранит правильный порядок дат. Предположим, что ваши данные за 2018 год.

Создайте образец данных

data have;
    length name $10.;
    array months[*] Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec;
    retain goal 75;

    do name = 'Mark', 'Jane', 'Jake', 'John', 'Jack', 'Jill', 'Bill', 'Jerry', 'Joseph';
        do i = 1 to dim(months);
            months[i] = round(100*rand('uniform') );
        end;

        output;
    end;

    drop i;
run;

Решение

proc sort data=have;
    by name goal;
run;

proc transpose data=have 
               out=have_transposed;
    by name goal;

    var Jan--Dec;
run;

data want;
    set have_transposed;

    Month = input(cats('01', _NAME_, 2018), DATE9.);

    rename COL1 = Score;

    format month monname3.;
    drop _NAME_;
run;    

proc sgplot data=want;
    by name;

    series x=month y=goal / name='goal' lineattrs=(color=salmon thickness=2);
    series x=month y=score / name='series' lineattrs=(thickness=2);
    scatter x=month y=score / markerattrs=(symbol=circlefilled) name='points';
    keylegend 'series' 'goal';
run;
person Stu Sztukowski    schedule 06.11.2018