Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Loops SAS迭代是如何通过变量和if-else工作的_Loops_If Statement_Sas_Iteration - Fatal编程技术网

Loops SAS迭代是如何通过变量和if-else工作的

Loops SAS迭代是如何通过变量和if-else工作的,loops,if-statement,sas,iteration,Loops,If Statement,Sas,Iteration,我遇到了以下代码,它工作安静而不是直觉,因为SAS应该一步一步地处理。然而,下面的代码似乎以某种方式跳回到前面的代码,就像一个循环 请参见重置和重置_p2中标志和页面的区别 生成数据集: 试图理解此代码: 我们把台阶分开 pageit和flag列在reset和reset_p2中不同 重置中的pageit和标志: 重置页面p2中的pageit和标志: 这意味着代码似乎不是一步一步地运行,而是以某种方式跳回到if n eq 1部分。 任何人都能解释为什么会发生这种情况? 因为这真的不是直觉的 解释:

我遇到了以下代码,它工作安静而不是直觉,因为SAS应该一步一步地处理。然而,下面的代码似乎以某种方式跳回到前面的代码,就像一个循环

请参见重置和重置_p2中标志和页面的区别

生成数据集:

试图理解此代码: 我们把台阶分开

pageit和flag列在reset和reset_p2中不同

重置中的pageit和标志:

重置页面p2中的pageit和标志:

这意味着代码似乎不是一步一步地运行,而是以某种方式跳回到if n eq 1部分。 任何人都能解释为什么会发生这种情况?
因为这真的不是直觉的

解释:变量_N_________________________________。您有100行,因此无论发生什么,它都将处理100个步骤。在您的代码中,您不断增加标志,但每次达到25时,都将其重置为0;而且,当它达到25时,你可以增加它。和这正是您的输出的样子,因此我不确定您的困惑是什么。

说明:变量逐行遍历每行数据。您有100行,因此无论发生什么,它都将处理100个步骤。在您的代码中,您不断增加标志,但每次达到25时,都将其重置为0;而且,当它达到25时,你可以增加它。和这正是您的输出看起来的样子,因此我不确定您的困惑是什么。

如果您按照以下方式修改“重置”代码

data reset;
  set new;
  by type;
  if _n_ eq 1 then flag=0;   
  else flag+1;
  if flag>=25 then do;
    pageit+1; 
    flag1=0;
  end;
run;

如果您按以下方式修改“重置”代码,则可能会得到当标志>=25时的分辨率

data reset;
  set new;
  by type;
  if _n_ eq 1 then flag=0;   
  else flag+1;
  if flag>=25 then do;
    pageit+1; 
    flag1=0;
  end;
run;

当flag>=25时,您可能会得到解析结果。

原始数据步骤正在生成输入数据集中不存在的新flag变量。因为您使用的是sum语句,所以当隐式数据步循环重新启动时,变量的值将被保留,而不是重置为丢失

但是在第二个数据步骤中,输入数据集中已经存在FLAG变量。因此,当从输入数据集读取观测值时,其值将被覆盖。因此,一旦超过观测值25,则标志>=25条件始终为真,因此标志将从25、26、27等重置为0

使用RETAIN时,请确保使用的是未从输入数据集读入的新变量

如果您已经有一个值为0,1,2,…24,25,26,…的标志变量,。。。你想把它分成25个值的箱子,然后用算术运算

new_flag = mod(flag,25);
new_page = int(flag/25);

原始数据步骤是生成输入数据集中不存在的新标志变量。因为您使用的是sum语句,所以当隐式数据步循环重新启动时,变量的值将被保留,而不是重置为丢失

但是在第二个数据步骤中,输入数据集中已经存在FLAG变量。因此,当从输入数据集读取观测值时,其值将被覆盖。因此,一旦超过观测值25,则标志>=25条件始终为真,因此标志将从25、26、27等重置为0

使用RETAIN时,请确保使用的是未从输入数据集读入的新变量

如果您已经有一个值为0,1,2,…24,25,26,…的标志变量,。。。你想把它分成25个值的箱子,然后用算术运算

new_flag = mod(flag,25);
new_page = int(flag/25);

我看到隐藏的机制是,当我们使用求和时,值被保留。这完全解释了这段代码。谢谢。我看到隐藏的机制是,当我们使用总和时,值被保留。这完全解释了这段代码。谢谢
new_flag = mod(flag,25);
new_page = int(flag/25);