Как я могу сделать символьную переменную равной отформатированному значению числовой переменной для произвольных форматов SAS?

Если это - просто простые данные, содержавшиеся в файле Excel, можно считать данные с помощью ADO.NET. См. строки подключения, перечисленные здесь:

http://www.connectionstrings.com/?carrier=excel2007 или http://www.connectionstrings.com/?carrier=excel

Обновление-Ryan

: тогда можно просто прочитать рабочий лист через что-то как select * from [Sheet1$]

8
задан skaffman 9 September 2009 в 13:22
поделиться

5 ответов

Функциональные форматы функций VValue Переменная передана ему, используя формат, связанный с переменной. Вот код, использующий vValue :

data test;
  format i ddmmyy10.;
  i = "10JUN2009"d;
run;

data _null_;
  set test;
  i_formatted = vvalue(i);
  put i_formatted;
run;

, в то время как решение CMJOHNS немного быстрее, чем этот код, этот код проще, потому что нет MACROS.

9
ответ дан 5 December 2019 в 06:54
поделиться

Я могу сделать это с помощью кода макроса и sashelp.vcolumn , но это немного неудобно.

proc sql noprint;
  select trim(left(format)) into :format
    from sashelp.vcolumn
    where libname eq 'WORK' and memname eq 'TEST';
run;

data test2;
  set test;
  i_formatted = put(i, &format);
  put i_formatted;
run;
3
ответ дан 5 December 2019 в 06:54
поделиться

Похоже, это сработало для пары, которую я пробовал. Я использовал VARFMT и макрос-функцию для получения формата данной переменной.

 data test;
  format i ddmmyy10. b comma12.;
  i = "10JUN2009"d;
  b = 123405321;
run;


%macro  varlabel(variable) ;
  %let dsid=%sysfunc(open(&SYSLAST.)) ;
  %let varnum=%sysfunc(varnum(&dsid,&variable)) ;
  %let fmt=%sysfunc(varfmt(&dsid,&varnum));
  %let dsid=%sysfunc(close(&dsid)) ;
  &fmt
%mend varlabel;

data test2;
  set test;
  i_formatted = put(i, %varlabel(i) );
  b_formatted = put(b, %varlabel(b) );
  put i_formatted=;
  put b_formatted=;
run;

Это дало мне:

i_formatted=10/06/2009
b_formatted=123,405,321
5
ответ дан 5 December 2019 в 06:54
поделиться

Используйте функцию vformat () .

/* test data */
data test;
  i = "10jun2009"d;
  format i ddmmyy10.;
run;

/* print out the value using the associated format */
data _null_;
  set test;
  i_formatted = putn(i, vformat(i));
  put i_formatted=;
run;
/* on log
i_formatted=10/06/2099
*/
7
ответ дан 5 December 2019 в 06:54
поделиться

Да, есть функция putformatted (). На самом деле, есть два: putc () и putn (). Putc обрабатывает форматы символов, PUTN () числовой. Ваш код должен будет посмотреть на имя формата (все и только форматы символов, начнущие с «$»), определяют, какие для использования. Вот синтаксис PUTC (из интерактивной помощи):

PUTC(source, format.<,w>)

аргументы

source 
is the SAS expression to which you want to apply the format.

format. 
is an expression that contains the character format you want to apply to source.

w 
specifies a width to apply to the format. 

Interaction: If you specify a width here, it overrides any width specification
in the format. 
0
ответ дан 5 December 2019 в 06:54
поделиться
Другие вопросы по тегам:

Похожие вопросы: