为什么在SAS中只给我一个观察结果之前使用do?

时间:2018-10-08 01:00:33

标签: sas

你好,我正在尝试使用do直到直到解决迭代问题,但是我没有得到任何结果。另外,我现在正在独自使用书籍,文档和视频学习SAS,因此我是这种语言的新手。我的问题是:

汽车每加仑行驶20英里。编写程序,以便当距离达到250英里或已使用10加仑燃料时,程序停止生成观测值 提示英里=加仑*英里/加仑

我使用了以下代码:

data mileage;
mpg = 20;
do until (miles le 250);
miles +1;
do until (gallon le 10);
gallon + 1;
miles = gallon * mpg;
end;
end;
output;
run;

请告诉我我在做什么错? 非常感谢您的时间和关注!

1 个答案:

答案 0 :(得分:4)

因为您一直等到DO循环完成后才能写出所有观测值。如果要编写多个观察值,则应将output语句移至do循环内。

另外,您的程序永远不会初始化gallon,因此mpg将始终丢失,并且少于250,这意味着您的外部DO循环将仅执行一次。

由于10 * 20小于250,因此无需编写程序就可以回答您写的问题。假设您还想更改mpg值,那么也许这是您想要的?

data mileage;
  do mpg = 20 by 1 until (miles ge 250);
    do gallon=1 to 10 until (miles ge 250);
      miles = gallon * mpg;
      output;
    end;
  end;
run;

将迭代循环与UNTIL条件结合起来的能力是数据步骤DO循环的许多不错的功能之一。