Перечисление переменных во всех наборах данных, а также тип переменной - PullRequest
0 голосов
/ 10 января 2019

Я пытаюсь составить программу, чтобы дать мне возможность практиковаться для сдачи экзамена SAS; Я хочу перечислить переменные во всех наборах данных, а также тип переменной;

libname printlib '...';
libname proclib '...';

proc datasets library=proclib memtype=data nolist;
copy out=printlib;
select delay internat;
run;

%macro printall(libname, worklib=work);
%local num i;
proc datasets library=&libname memtype=data nodetails;
contents out=&worklib..temp1(keep=memname) data=_all_ noprint;
run;

data _null_;
set &worklib..temp1 end=final;
by memname notsorted;
if last.memname;
n+1;
call symput('ds'||left(put(n, 8.)), trim(memname));
if final then
call symput('num', put(n, 8.));
run;

%do i=1 %to #

data work.data;
set &libname..&&ds&i;
var_type=vtype(name);
run;

proc contents data=work.data noprint out=data_info (keep=name varnum var_type);
run;

proc sort data=data_info out=variable_names(keep=name var_type);
by varnum;
run;

proc print data=work.variable_names;
title &libname..&&ds&i;
run;

%end;
%mend printall;

options nodate pageno=1 linesize=70 pagesize=60;
%printall(printlib)

Результаты должны отображать заголовок, который является именем набора данных, первый столбец должен быть именем переменной, а второй столбец должен быть типом переменной (символьной или числовой)

Сейчас он показывает заголовок и имена переменных; но не тип переменной. Я не совсем уверен, как заставить тип переменной отображаться рядом с именем переменной.

Ответы [ 3 ]

0 голосов
/ 10 января 2019

вы также можете использовать dictionary.columns. это дает имя таблицы имя столбца и тип данных

   proc sql;
   create table want as 
   select cats( libname,'.', memname) as tablename,  name, type from 
   dictionary.columns;
0 голосов
/ 10 января 2019

Обучение? Тебе нужно глубоко впасть в ответ @Tom. Некоторые выходные данные можно очистить, используя формат для присвоения читаемых человеком значений типов, а значения переменных можно сделать так, чтобы они появлялись в выражении заголовка с использованием конструкции #BYVALn.

proc datasets noprint lib=work kill;
run;

data work.one(label="One is the loneliest number") work.two work.three;
  set sashelp.cars(obs=1);
run;

proc contents noprint data=work._all_ out=contents;
run;

proc format;
  value type 1='Num' 2='Char';
run;

proc sort data=contents;
  by libname memname varnum;

options nobyline;
title "Dataset: #byval1..#byval2 (#byval3)";

proc print noobs label data=contents;
  by libname memname memlabel;
  var varnum name type label;
  format type type.;
run;

title;
0 голосов
/ 10 января 2019

Почему ты делаешь это таким сложным?

proc contents data=&libname.._all_ noprint out=contents ; 
run;

proc sort data=contents;
  by memname varnum; 
run;

proc print data=contents ;
   by memname memlabel ;
   var varnum name type length format informat label;
run;
...