Как отформатировать proc tabulate для получения десятичных миллионов?

Мои данные представлены в формате миллионов, и мне нужно представить данные в виде десятичных миллионов в SAS.

У меня есть данные, содержащие арендную плату в миллионах долларов, т.е. 1 260 678,21, которые я надеюсь представить в виде десятичных миллионов, то есть "1,3".

Я попытался создать свою собственную функцию для деления следующим образом:

           /***/
* create a function to round 
*;

      proc fcmp outlib=work.function.sample;
      function round1000x(value);
      return(round(value/1000000,1));
      endsub; 
      run; 

  *
  * make function available
  *;
  options cmplib=work.func;

   *
   * create a format that uses the function
   *;
   proc format; 
     value round1000x.;
   run; 


 /*use this format in a proc tabulate statement*/

 proc tabulate data=my_data format=round1000x.;
var rent_cost;
table rent_cost;
  run;

Однако я получаю ошибку:

ERROR: The format ROUND1000X has a label that defines another format to be 
 loaded (named ROUND1000X), but this format could not be 
   successfully loaded (possibly for the same reason).

Кто-нибудь был бы знаком с этой проблемой?

1 ответ

Вы можете создать представление, которое масштабирует значение до желаемой величины и табулирует это.

Пример:

data have;
  do street = 1 to 50;
    rent = 7e5 + street * 1e5;
    output;
  end;
run;

data forTabulate / view=forTabulate;
  set have;
  rentM = round (rent / 1e6, 0.01);
run;

proc tabulate data=forTabulate;
  class street;
  var rentM;
  table street, rentM*sum='($M)'*f=5.2;
run;
Другие вопросы по тегам