我想创建一个包含治疗组 (i)、复制 (j) 和序列号 (k) 的 ID (bee_created) 列表。我有 9 个重复要处理,每个重复在治疗组中的序列号略有不同。因此,在宏 do 循环中创建所有 ID 会更有效。我浏览了一些文章,我想可以使用 %scan 但我无法生成工作代码。
对于每个重复,有五个处理组“aa”、“ab”、“ac”、“ea”和“ec”。我需要一个可以替换以下 4 个数据集的宏。请注意,唯一的区别在于 i、j 和 k 的值;否则是复制粘贴。提前致谢
/*dataset 1*/
data tag_num_replicate01_02;
length i $5. bee_created $9.;
exp_name="&exp_name";
do i= 'aa','ab', 'ac', 'ea','ec';
do j='01','02';
do k=101 to 210;
bee_created=compress (i||j||'-'||put(k, best.));
rename i=group_id;
output;
end;
end;
end;
run;
/*dataset 2*/
data tag_num_replicate04a;
length i $5. bee_created $9.;
exp_name="&exp_name";
do i= 'aa','ab', 'ac';
do j='04';
do k=501 to 615;
bee_created=compress (i||j||'-'||put(k, best.));
rename i=group_id;
output;
end;
end;
end;
run;
/*dataset 3*/
data tag_num_replicate04b;
length i $5. bee_created $9.;
exp_name="&exp_name";
do i= 'ea';
do j='04';
do k=501 to 623;
bee_created=compress (i||j||'-'||put(k, best.));
rename i=group_id;
output;
end;
end;
end;
run;
/*dataset 4*/
data tag_num_replicate04c;
length i $5. bee_created $9.;
exp_name="&exp_name";
do i= 'ec';
do j='04';
do k=501 to 620;
bee_created=compress (i||j||'-'||put(k, best.));
rename i=group_id;
output;
end;
end;
end;
run;
我试图生成一个包含“aa”、“ab”和“ac”的列表,但最终创建了四个变量 i、aa、ab 和 ac。如果您也能告诉我以下代码中的问题,我将不胜感激。
/*macro not working*/
%macro tag_generate(groups=);
data tag_num_test;
exp_name="&exp_name";
%do i= 1 %to 3;
j=%scan(&groups, &i);
output;
%end;
run;
%mend tag_generate;
%tag_generate(groups= aa ab ac);
常