Algorithm 使用if和do循环的数组问题

Algorithm 使用if和do循环的数组问题,algorithm,language-agnostic,Algorithm,Language Agnostic,这是我的代码: data INDAT8; set INDAT6; Array myarray{24,27}; goodgroups=0; do i=2 to 24 by 2; do j=2 to 27; if myarray[i,j] gt 1 then myarray[i+1,j] = 'bad'; else if myarray[i,j] eq 1 and myarray[i+1,j] = 1 then myarray[i+1,j]= 'good'; en

这是我的代码:

data INDAT8; set INDAT6;
Array myarray{24,27};
goodgroups=0;

do i=2 to 24 by 2;
   do j=2 to 27;

   if myarray[i,j] gt 1 then myarray[i+1,j] = 'bad';
       else if myarray[i,j] eq 1 and myarray[i+1,j] = 1 then myarray[i+1,j]= 'good';
   end;
end;
run;
proc print data=INDAT8; 运行

问题:

我有这种格式的数据——这只是一个例子:n=2 X Y信息

2      1       good
2      4       bad

3      2      good

4     1       bad
4      4      good

6       2     good
6       3     good
现在,以上数据按排序方式共7行。我需要分别制作一组2行、3行或4行,并生成一个图形。在上面的数据中,我创建了一组2行。第三行是单独保留的,因为第三行中没有其他列可以组成一个组。只能在同一行内形成一个组。其他行没有

现在,我将检查这两行在信息列中是否都有“good”。如果两行都有“好”-组成的组也是好的,否则是坏的。在上例中,第三组/最后一组为“良好”组。其余的都是坏组。完成所有行后,我将计算形成的良好组的总数/组的总数

在上面的示例中,输出将是:良好组的总数/组的总数=>1/3

这是n=2组大小的情况

现在,对于n=3,我们将3行分成一组,对于n=4,我们将4行分成一组,并以类似的方式找到好的/坏的组。如果组中的所有行都有“good”块,则结果为good块,否则为bad块

Example: n= 3

2      1       good
2      4       bad
2     6        good

3      2      good

4     1       good
4      4      good
4    6        good

6       2     good
6       3     good
在上面的例子中,我留下了第4行和最后2行,因为我不能用它们组成3行的组。第一组成绩为“差”,最后一组成绩为“好”。 产出:1/2

For n= 4:

2      1       good
2      4       good
2     6        good
2      7       good

3      2      good

4     1       good
4      4      good
4    6        good

6       2     good
6       3     good
6       4     good
6       5     good
在本例中,我将4分组,并找到结果。第五、第六、第七、第八排被留下或忽略。我做了两组,共4行,两组都是“好”块。 产出:2/2

因此,在从n=2、n-3和n=4获得3个输出值之后 我将绘制这些值的图表

如果您可以在任何语言中使用数组、If和do循环提供帮助。那太好了

我可以相应地更改代码

更新:


答案不一定是sas。因为它比任何东西都更与算法相关,所以我会接受任何语言的建议,只要他们展示了如何使用数组来完成这项任务。

我很难理解您的问题陈述,但从这里收集的信息来看,我可以提出以下建议:

将数据放入存储箱,然后处理摘要数据

实施1

假设:您不知道第一列的范围是什么,或者分布是稀疏的

创建一个哈希表。密钥将是您正在进行分组的项目。该值将是到目前为止看到的计数。 处理每个记录。如果该键已存在,则在哈希中增加该键的计数值。否则,添加键并将值设置为1。 继续,直到处理完所有记录 计算哈希表中的键数以及大于阈值的值数。 实施2

假设:您知道第一列的范围,并且分布相当密集

创建一个包含足够元素的整数数组,以便索引可以匹配列值。将所有元素初始化为零。此数组将保存您正在分组的每个项目的计数 处理每个记录。检查第一列的值。增加数组中相应的索引。所以,如果你有21个好的,那么做groupCount[2]++ 继续,直到处理完所有记录 遍历数组中的每个元素。计算有多少项为非零表示它们至少出现一次,以及有多少项符合阈值。
您可以使用相同的方法来收集好的计数和坏的计数。

Java标记是什么?我没有看到任何java代码或问题张贴。我敢肯定java不是这个,C++,甚至VB。我想这是SAS。是的,这是SAS。我需要任何编码方面的帮助。只需要知道算法样式,OP应该提供这些信息并编辑标签。如果他在我们提问时这样做,他的问题可能不会结束。我认为这个问题结束得太快了。你不需要再问了。我们应该重新打开它。