Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/jquery-ui/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
在SAS中选择合适的案例时遇到问题_Sas - Fatal编程技术网

在SAS中选择合适的案例时遇到问题

在SAS中选择合适的案例时遇到问题,sas,Sas,我需要有关SAS代码的帮助。我有一个数据集(test),其中包含变量yearcase和case。Yearcase是一个表示两辆汽车碰撞的变量。Case是一个二进制变量,表示碰撞中涉及的两辆汽车中的每一辆。我想创建一个数据集(test2),它只包括case=1(导致车祸的汽车)和case=0(没有导致车祸的汽车)。我希望每个年检(碰撞对)都有导致碰撞的汽车和没有导致碰撞的汽车。我想排除两辆车都没有造成碰撞(案例=0)或两辆车都造成碰撞(案例=1)的情况(两次机动车碰撞)。我在这里的代码产生以下输出

我需要有关SAS代码的帮助。我有一个数据集(test),其中包含变量yearcase和case。Yearcase是一个表示两辆汽车碰撞的变量。Case是一个二进制变量,表示碰撞中涉及的两辆汽车中的每一辆。我想创建一个数据集(test2),它只包括case=1(导致车祸的汽车)和case=0(没有导致车祸的汽车)。我希望每个年检(碰撞对)都有导致碰撞的汽车和没有导致碰撞的汽车。我想排除两辆车都没有造成碰撞(案例=0)或两辆车都造成碰撞(案例=1)的情况(两次机动车碰撞)。我在这里的代码产生以下输出。正如您所看到的,我仍然有一些案例(崩溃),其中要么两个案例都导致了崩溃(case=1),要么两个案例都没有导致崩溃(case=0)。我试图使用标志变量nocase和bothcase,但它不起作用

data test2; 
set test;
retain nocase bothcase;
by yearcase;
if first.yearcase then case=nocase;
if last.yearcase then case=bothcase;
if bothcase=nocase then output;
run;

proc freq data=test2;
tables yearcase*case/norow nocol nopercent;
run;

Output looks like this:

                        case 
 yearcase        case= 0    case= 1       Total
 201410001        0           2          2
 201410007        0           2          2
 201410015        2           0          2
 201410024        1           1          2
 201410031        1           1          2
 201410036        0           2          2
我如何确保只有一辆车(案例=1)和另一辆车(案例=0)导致了碰撞的案例(两次机动车碰撞)?我可能需要使用标志变量,但我不确定如何使用。非常感谢您的帮助


感谢您

关于未来的数据处理问题,请清楚说明拥有数据集和想要数据集。另外描述变量及其典型值和含义。有了一个好问题,你要么在发帖前自己弄清楚,要么很有可能得到一个好答案

由于您尚未明确说明have(或input)数据集,因此只能从发布的失败处理代码中推断变量。我的假设是有标志变量case两个case

case可能代表了一个case id,但两个case都将该规则剔除

没有输入细节,就没有好的答案

您可能需要一些使用DOW循环的代码,并且每个组只输出一条记录

data want;
  do until (last.yearcase);
    set have;
    by yearcase;
    if <condition-1> then counter_1+1; else
    if <condition-2> then counter_2_1;
  end;
  if <counter_1 logic> and <counter_2 logic> then OUTPUT;
run;
需要数据;
直到(去年)为止;
集有;
按年份分类;
如果是,则计数器_1+1;其他的
如果是,则计数器_2_1;
结束;
if和then输出;
跑
有时,在对组中的每个项目应用另一条规则之前,您需要对整个组进行“测量”或“检测”。对于这些情况,可以使用两个相邻的环路

data want;
  do _n_ = 1 by 1 until (last.yearcase);
    set have;
    by yearcase;
    if <condition-detection-logic> then <flag> = 1;
  end;
  do _n_ = 1 to _n_;  %* reprocess that same by group through a second input buffer (i.e. set);
    set have;
    if < <flag> based logic> then <flag-2> = 1;
  end;
  if <flag-2> then OUTPUT;
run;
需要数据;
do_n_=1乘以1直到(最后一年案例);
集有;
按年份分类;
如果then=1;
结束;
do=1至%*通过第二个输入缓冲区(即set)分组重新处理相同的数据;
集有;
如果<基于逻辑>则=1;
结束;
如果然后输出;
跑

对于未来的数据处理问题,请清楚地说明have数据集和want数据集。另外描述变量及其典型值和含义。有了一个好问题,你要么在发帖前自己弄清楚,要么很有可能得到一个好答案

由于您尚未明确说明have(或input)数据集,因此只能从发布的失败处理代码中推断变量。我的假设是有标志变量case两个case

case可能代表了一个case id,但两个case都将该规则剔除

没有输入细节,就没有好的答案

您可能需要一些使用DOW循环的代码,并且每个组只输出一条记录

data want;
  do until (last.yearcase);
    set have;
    by yearcase;
    if <condition-1> then counter_1+1; else
    if <condition-2> then counter_2_1;
  end;
  if <counter_1 logic> and <counter_2 logic> then OUTPUT;
run;
需要数据;
直到(去年)为止;
集有;
按年份分类;
如果是,则计数器_1+1;其他的
如果是,则计数器_2_1;
结束;
if和then输出;
跑
有时,在对组中的每个项目应用另一条规则之前,您需要对整个组进行“测量”或“检测”。对于这些情况,可以使用两个相邻的环路

data want;
  do _n_ = 1 by 1 until (last.yearcase);
    set have;
    by yearcase;
    if <condition-detection-logic> then <flag> = 1;
  end;
  do _n_ = 1 to _n_;  %* reprocess that same by group through a second input buffer (i.e. set);
    set have;
    if < <flag> based logic> then <flag-2> = 1;
  end;
  if <flag-2> then OUTPUT;
run;
需要数据;
do_n_=1乘以1直到(最后一年案例);
集有;
按年份分类;
如果then=1;
结束;
do=1至%*通过第二个输入缓冲区(即set)分组重新处理相同的数据;
集有;
如果<基于逻辑>则=1;
结束;
如果然后输出;
跑

感谢您的回复。我的问题一开始没有很好地阐明。但我做了一些编辑,以澄清我拥有的数据集和我想要的数据集。我找到了另一种解决方案:

 `proc sort data=test;
  by yearcase case;
  run;

  data test2;
  set test;
  by yearcase case;
  if (case=0 and first.yearcase and last.case)
  or (case=1 and last.yearcase and first.case);
  run;`
  This gives me a dataset test2 that consist of 1 case (case=1) and 1 
  noncase (case=0) per each YEARCASE.

  `proc freq data=test2;
   tables yearcase*case/norow nocol nopercent;
   run;`

   output looks like this:

                          case 
   yearcase        case= 0    case= 1       Total
   201410024        1           1          2
   201410031        1           1          2
   201410040        1           1          2
   201410044        1           1          2
   201410051        1           1          2
   201410052        1           1          2
我仍然对使用retain语句和/或 将变量标记为之前的初始代码


谢谢你的回复。我的问题一开始没有很好地阐明。但我做了一些编辑,以澄清我拥有的数据集和我想要的数据集。我找到了另一种解决方案:

 `proc sort data=test;
  by yearcase case;
  run;

  data test2;
  set test;
  by yearcase case;
  if (case=0 and first.yearcase and last.case)
  or (case=1 and last.yearcase and first.case);
  run;`
  This gives me a dataset test2 that consist of 1 case (case=1) and 1 
  noncase (case=0) per each YEARCASE.

  `proc freq data=test2;
   tables yearcase*case/norow nocol nopercent;
   run;`

   output looks like this:

                          case 
   yearcase        case= 0    case= 1       Total
   201410024        1           1          2
   201410031        1           1          2
   201410040        1           1          2
   201410044        1           1          2
   201410051        1           1          2
   201410052        1           1          2
我仍然对使用retain语句和/或 将变量标记为之前的初始代码


谢谢

请提供您的输入/输出示例。我不太清楚你在问什么。我已经编辑了这篇文章,包括了输出的样本。让我知道这是否合理。Yearcase是一个由成对的case变量组成的变量。我只想创建一个数据集,其中每个yearcase都有一个case和一个nocase(1和1),而不是2个nocase或2个case。我仍然不完全理解您想要什么。请提供示例输入和您想要的输出。我已经澄清了我的问题,并输入了数据集和输出。让我知道我的问题是否有意义。请提供您的输入/输出示例。我不太清楚你在问什么。我已经编辑了这篇文章,包括了输出的样本。让我知道这是否合理。Yearcase是一个由成对的case变量组成的变量。我只想创建一个数据集,其中每个yearcase都有一个case和一个nocase(1和1),而不是2个nocase或2个case。我仍然不完全理解您想要什么。请提供示例输入和您想要的输出t