SAS/SAS Macro - Чтение строки наблюдения за строкой

Пример данных:

PatID Strata1 Strata2 Allocated TG      
    1       1       1           T1
    2       1       2           T2
    3       2       3           T1
    4       1       3            .
    5       2       2            .
    6       1       3            .
    7       1       3            .
    8       2       4            .

У меня есть пациенты с одной из двух страт (состояний).

Мне нужно будет рассчитать выделенный TG на основе страт, а также выделенный TG для всех предыдущих пациентов. В приведенном выше примере выделенный TG присутствует, например, для 3 пациентов.

Для 4-го пациента выделенный ТГ будет рассчитываться следующим образом:

Какова ценность Strata1.

  1. Если 1, количество предыдущих пациентов назначено выделенной TG T1, когда 1 подсчитывается, сколько предыдущих пациентов назначено выделенной TG T2, когда 1

  2. Если 2, подсчитывается, сколько предыдущих пациентов назначено выделенной TG T1, когда 1 подсчитывается, сколько предыдущих пациентов назначено выделенной TG T2, когда 1

Аналогично для Strata2. Подсчет всех предыдущих пациентов. Распределенный TG на основе каждой страты.

После всего этого я получу какое-то значение для каждого. На основе выходного значения, с какими слоями номер распределения меньше, будет выделен тот TG(T1/T2).

После этого он должен рассчитать PatID5.Again, который должен рассчитать предыдущие 4 пациента.


person user2568403    schedule 10.07.2013    source источник
comment
Добро пожаловать в СО. Вы должны предоставить более подробную информацию о том, какие расчеты вы хотите сделать. Я предполагаю, что вы хотите что-то сделать с n-м наблюдением на основе (n-1)-го наблюдения, но вам нужно предоставить больше информации.   -  person Hong Ooi    schedule 10.07.2013
comment
Если бы вы могли привести небольшой пример того, чего вы хотите достичь (например, 6 строк данных и ожидаемый результат), это очень помогло бы. Но, скорее всего, вам стоит просто заглянуть в инструкцию continue.   -  person mvherweg    schedule 10.07.2013
comment
Привет, оба, я обновил или улучшил свой вопрос. Пожалуйста, посмотрите сейчас. :)   -  person user2568403    schedule 10.07.2013
comment
Я отредактировал ваш вопрос, чтобы сделать его более ясным, но я думаю, что вам все же нужно предоставить немного более четкую информацию. Можете ли вы опубликовать набор данных с рассчитанными TG2 для оставшихся 5 строк - какими они должны быть? Кроме того, это звучит так, как будто это можно заказать, т.е. важно, чтобы пациент 4 был рассчитан до пациента 5, это правда? Наконец, вам нужно показать нам, что вы уже пробовали; это не сайт "сделай свою работу за тебя", а помощь по конкретным вопросам. На что ты натыкаешься?   -  person Joe    schedule 10.07.2013
comment
Привет Джо, я еще не рассчитал. Я также все еще нахожусь в стадии кодирования. Да, идентификатор пациента будет рассчитываться только в порядке возрастания. Поскольку я мало что знаю о макросах, я все еще читаю книги/просматриваю разные сайты, чтобы найти способ/логику реализации этого    -  person user2568403    schedule 10.07.2013
comment
И, спасибо за редактирование вопроса в читаемой форме, Джо. :)   -  person user2568403    schedule 10.07.2013
comment
Если вы не можете вручную решить это для приведенного выше примера, вы не сможете получить здесь никакой помощи. Я предлагаю вам потратить время на то, чтобы выяснить, как это сделать, а затем отредактировать свой вопрос, чтобы отразить, какие проблемы у вас могут возникнуть.   -  person Joe    schedule 10.07.2013
comment
Что такое распределенный ТГ? Пожалуйста, не используйте доменно-ориентированный язык — это только усложняет понимание. Ваши пункты 1. и 2. в разделе «Каково значение для Strata1» говорят точно об одном и том же (кроме «Если 1» и «Если 2»). Это было намеренно?   -  person JDB still remembers Monica    schedule 11.07.2013


Ответы (1)


Программисты предпочитают пакетный режим, а не построчный для повышения производительности. Вы можете использовать firstobs и obs в циклах. Для пакетного режима используйте obs-firstobs как 1000 или другое число, для построчного использования используйте obs=firstobs+1.

person Outlier    schedule 11.12.2014