在SAS中进行(迭代?)Do循环

时间:2016-03-10 02:52:09

标签: arrays sas do-loops

我知道这很简单,但我似乎无法弄明白。

我有一个有50名学生的数据集,其中一个专栏称为考试分数,每个学生都有一个考试分数。我需要经历并找到所有学生之间的差异 - 所以学生1得分 - 学生2得分,学生2得分 - 学生3得分.....到50然后学生2得分 - 学生3得分,...学生2得分 - 学生50分。

我基本上需要以测试分数的差异矩阵结束。

我必须使用数组 - 所以它会是这样的 数据:     学生分数     亚历杭德罗91     阿特金林87     比尔72     巴特勒94     科尔曼91

data array;
set testscores;
array score(50) Score1-Score 50; ?I dont think this is correct
do i=1 to 50;
difference= score(i) -score(i+1)?? I really have no idea everything I try isn't working 
end;
run;

我需要最终得到每个学生分数之间存在差异的东西

1 个答案:

答案 0 :(得分:0)

第一个数据步骤在50名学生的统一分布之后产生1(a)和100(b)之间的随机分数。

然后,proc距离计算每个学生与所有其他学生的分数之间的差异。为此,“学生”应该是一个字符变量。

data scores;
    a = 1;
    b = 100;
    do Student_temp = 1 to 50;
        Student = compress(put(student_temp, 8.));
        u = ranuni(12345);
        Score = floor(a + (b-a)*u);
        output;
    end;
    drop Student_temp a b u;
run;

proc distance data=scores out=Diff method=Euclid;
    var interval(score);
    id Student;
run;