SAS - Создание нумерованного диапазона Список символьных переменных? - PullRequest
1 голос
/ 23 марта 2012

Я могу создать список нумерованного диапазона числового типа, но не символьного типа.

Мой код похож на это:

DATA TestDataset;
    INPUT a1-a3 $;
    DATALINES;
    A   B   C
    ;
RUN;

Это дает 3 переменные - [a1], [a2] и [a3], как и ожидалось. Однако [a3] является символом, но [a1] и [a2] являются числовыми. Это оставляет меня с пропущенными значениями согласно следующей таблице:

a1  a2  a3
.   .   C

Следующий код работает, но, очевидно, он плохо масштабируется.

INPUT a1 $ a2 $ a3 $;

Я что-то упустил?

Ответы [ 2 ]

4 голосов
/ 23 марта 2012

Я полагаю, что вы можете использовать дефис в выражении длины, чтобы получить то, что вы хотите.Вы действительно должны использовать оператор длины независимо .. в противном случае он по умолчанию равен $ 8.

DATA TestDataset;
 length a1-a3 $20;
 INPUT a1-a3 ;
 DATALINES;
 A   B   C
 ;
RUN;
4 голосов
/ 23 марта 2012

Я придумал решение для макроса:

%MACRO var_list_char (var_prefix, n);
    %LOCAL i ;

    %DO i = 1 %TO &n;
        &var_prefix&i$
    %END;   
%MEND;


DATA TestDataset;
    INPUT %var_list_char (a, 3);

    DATALINES;
        A   B   C
    ;
RUN;

Хотел бы я найти способ сделать это без макросов - я буду копаться немного и обновлю этот пост, если найду больше. Между тем, вышеуказанный подход определенно сработает.

ОБНОВЛЕНИЕ 1 : Решение @ carolinajay65, приведенное выше, является правильным немакро-подходом.

ОБНОВЛЕНИЕ 2 : Я нашел другой способ.

DATA TestDataset;
    INPUT (a1-a3) ($);
    DATALINES;
    A   B   C
    ;
RUN;

Дополнительную документацию по языковым функциям, поддерживающим эту технику, можно найти здесь , в разделе «Как группировать переменные и информаторы».

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...