Линейные графики SAS из данных в строке, а не в столбце - PullRequest
0 голосов
/ 05 ноября 2018

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

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

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;**

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

image

1 Ответ

0 голосов
/ 06 ноября 2018

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

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;
...