首页 > 解决方案 > 用变量设置一维数组的长度

问题描述

我想根据我从读取数据集获得的值来设置数组的长度:具有一个变量num和一个数值的数字。但我收到一条错误消息:说我无法启动 probs 数组。我能得到任何关于如何解决这个问题的建议吗?(我真的不想硬编码 probs 数组的长度)

data test;
 if _n_=1 then do;
 set work.number;
 i =  num +1;
 end;

array probs{i} _temporary_ .....

标签: arrayssas

解决方案


SAS 数据步长数组在步长运行时不能动态调整大小。

一种常见的方法是在数据步骤之前将计算的数据集行数放入宏变量中。

我不确定你在做什么probs

  • 什么值将进入数组元素?
  • 在遍历数据集的每一行时是否需要所有 概率数据?
  • 是否从概率数据计算出单个结果?

示例 -使用set 选项计算数据null中的行数:nobs

data _null_;
  if 0 then set work.number nobs=row_count;
  call symputx ('ROW_COUNT', row_count);
  stop;
run;

data test;
  array probs (&ROW_COUNT.) _temporary_;

  * something with probs[index] ;
  * maybe fill it ?
  do index = 1 by 1 until (last_row);
    set work.number;
    probs[index] = prob; * prob from ith row;
  end;

  * do some computation that a procedure isn't able to;
  …
  result_over_all_data = my_magic; * one result row from processing all prob;
  output;
  stop;
run;

当然,您对数组的实际使用会有所不同。

获取 row_count 的许多其他方法包括dictionary.table视图、sqlselect count(*) into和各种ATTRN调用。


推荐阅读