SAS中文论坛
标题:
求助!
[打印本页]
作者:
liusiyu195
时间:
2015-4-12 11:02
标题:
求助!
下方为一个宏程序,作用是模拟一系列二分变量的LCA数据,那么如何改成模拟多级计分(3,5,7级计分)的程序呢?
%MACRO SimulateLcaDataset( true_gamma_dataset=,
true_rho_dataset=,
output_dataset_name=,
total_n= ); /*
PROC IML;
* Process input... ;
USE &true_gamma_dataset;
READ ALL INTO true_gamma;
CLOSE &true_gamma_dataset;
USE &true_rho_dataset;
READ ALL INTO true_rho_yes;
CLOSE &true_rho_dataset;
total_n = &total_n;
true_nclass = NCOL(true_rho_yes);
n_items = NROW(true_rho_yes);
***************************************************** ;
items = ('Item' + CHAR((1:n_items),3));
* assumes < 1000 items;
CALL CHANGE(items," ","0",0);
true_class = J(&total_n,1,0);
DO this_person = 1 TO &total_n ;
temp = 0;
CALL RANDGEN(temp, 'TABLE', true_gamma);
true_class[this_person] = temp;
END;
responses = J(&total_n, n_items, 0);
DO this_person = 1 TO &total_n ;
DO this_item = 1 TO n_items;
temp = 0;
this_persons_class = true_class[this_person];
CALL RANDGEN(temp, 'BERNOULLI',
true_rho_yes[this_item,this_persons_class]);
responses[this_person,this_item] = 2 - temp;
END;
END;
ResponsePatterns = J(2**n_items, n_items, 0);
DO this_item = 1 TO n_items;
temp = REPEAT(1, 2**(n_items-this_item), 1) // REPEAT(2, 2**(n_items-this_item), 1);
temp = REPEAT(temp, 2**(this_item-1),1);
ResponsePatterns[,this_item] = temp;
END;
Count = J((2**n_items),1,0);
DO pattern_index = 1 TO (2**n_items);
Matches = J(&total_n, 1, 1);
DO this_item = 1 TO n_items;
Matches = Matches #
(responses[,this_item]=ResponsePatterns[pattern_index,this_item]);
Count[pattern_index] = Matches[+];
END;
END;
responses_matrix = ResponsePatterns || Count;
cols = items || 'Count';
CREATE &output_dataset_name FROM responses_matrix [ COLNAME = cols ];
APPEND FROM responses_matrix;
* The name of the append command can be misleading. ;
* It does not append to the data from the previous ;
* replication, which is replaced. It just appends ;
* to the new empty dataset, i.e., writes the data. ;
CLOSE &output_dataset_name;
QUIT;
DATA &output_dataset_name;
SET &output_dataset_name;
WHERE Count > 0; * omit non-occurring patterns;
RUN;
%MEND;
欢迎光临 SAS中文论坛 (https://mysas.net/forum/)
Powered by Discuz! X3.2