Циклы DO для обновления распределения SAS

Я работаю над клиническим испытанием, в котором мне нужно создать переменную для распределения (Zjt) на основе переменной (Xjk) и T, K (лечения = 1,2,3) и возрастного фактора (J = 1,2,3). ). Мы предполагаем, что если пациент попадает в возрастной фактор (j), то ему можно назначить K видов лечения (1,2,3). Таким образом, если пациент находится в возрастном факторе один, ему могут быть назначены X11, X12, X13. Фактор два (X21, X22, X33). Фактор 3(Х31,Х32,Х33). Z — это переменная, которая ведет счет для каждого назначенного лечения. T и K — это методы лечения, используемые в разных сценариях. Пример данных выглядит следующим образом:

Subject J K  T X
1       1 2  2 X12
2       2 2  2 X22
3       1 1  1 X11
4       2 1  1 X21
..............
2310    1 3 X13

data four;
set four;    
If J = 1 and K=1 then X=X11
If J=2   and K=1 then X=X21 
If J=3   and K=2 then X=X32
data four;
set four;
If J=1 and T=1 then Z11=X11+1 Z12=X12 Z13=X13
If J=1 and T=2 then Z11=X11   Z12=X12+l Z13=X13
If J=1 and T=3 then Z11=X11   Z12=X12   Z13=X13+1
If J=2 and T=1 then Z21=X21+1 Z22=X22   Z23=X23
If J=2 and T=2 then Z21=X21   Z22=X22+1 Z23=X23
If J=2 and T=3 then Z21=X21   Z22=X22   Z23=X23+1

затем это повторяется для фактора 3.

Каждый раз, когда T=K, Z (счетчик для Xjk) увеличивается на 1, если T не равно K, то Z остается прежним. Я думаю, что мне понадобится массив, чтобы каждый раз проверять условие, и я понятия не имею, как это сделать, поскольку я очень новичок в SAS. Я понятия не имею, как запрограммировать Z, так как созданные мной массивы не сработали. Любая помощь будет оценена.


person Rani    schedule 21.06.2018    source источник
comment
Что означает z11=x11+1? x11 это переменная? Или вы просто говорите, что z11 содержит количество записей, содержащих x11?   -  person Joe    schedule 21.06.2018
comment
Извините, я имел в виду, что z11 содержит количество записей, содержащих x11.   -  person Rani    schedule 21.06.2018
comment
Я думаю, что это все еще не очень ясно, что вы делаете. Чем это отличается от обычной частоты?   -  person Joe    schedule 21.06.2018
comment
если t = k, нормальная частота увеличивается на 1. Таким образом, в этом случае это будет количество записей, которые имеют x11 + 1, поэтому каждый раз будет добавляться дополнительная 1.   -  person Rani    schedule 21.06.2018
comment
Пожалуйста, покажите пример входных данных и ожидаемый результат для этого ввода. Пожалуйста, покажите примеры как шаги данных, которые можно выполнить, чтобы избежать путаницы. Например, в вашей первой таблице переменная X является числовой или символьной? Являются ли такие значения, как X12 в образце таблицы, строкой 'X12' или заполнителем для некоторого числа или ссылки на переменную?   -  person Tom    schedule 22.06.2018


Ответы (1)


Действительно похоже, что вы делаете это слишком сложным. (или я не понимаю вопроса.)

Похоже, у вас есть список субъектов, к какой возрастной группе они относятся и к каким двум группам лечения они были отнесены. Итак, похоже, у вас есть такие данные:

data have ;
  input Subj AgeGrp Trt1 Trt2 ;
cards;
1  1 2  2
2  2 2  2
3  1 1  1
4  2 1  1
;

Вы можете просто использовать PROC FREQ, чтобы подсчитать, сколько попадает в каждую комбинацию.

proc freq data=have; tables trt1*trt2 ; run;

Если вам нужны подсчеты отдельно для каждой возрастной группы, добавьте и эту переменную.

proc freq data=have; tables agegrp*trt1*trt2 ; run;
person Tom    schedule 22.06.2018