访问所有可访问的SAS格式?

如何解决访问所有可访问的SAS格式?

假设我们的项目有数百个彼此调用的SAS脚本。它还包括大量的SAS格式,主要用于具有某些特征的列,例如格式File "/hdfs/data_06/yarn/nm/usercache/<alias>/appcache/application_1583989737267_1123855/container_e59_1583989737267_1123855_01_000001/py4j-0.9-src.zip/py4j/java_gateway.py",line 746,in send_command raise Py4JError("Answer from Java side is empty") Py4JError: Answer from Java side is empty ERROR:py4j.java_gateway:Error while sending or receiving. Traceback (most recent call last):File "/hdfs/data_10/yarn/nm/usercache/<alias>/appcache/application_1583989737267_1123601/container_e59_1583989737267_1123601_01_000001/py4j-0.9-src.zip/py4j/java_gateway.py",line 626,in send_command File "/hdfs/data_10/yarn/nm/usercache/<alias>/appcache/application_1583989737267_1123601/container_e59_1583989737267_1123601_01_000001/py4j-0.9-src.zip/py4j/java_gateway.py",line 749,in send_command File "/usr/lib64/python2.7/logging/__init__.py",line 1182,in exception self.error(msg,*args,**kwargs) File "/usr/lib64/python2.7/logging/__init__.py",line 1175,in error self._log(ERROR,msg,args,line 1268,in _log self.handle(record) File "/usr/lib64/python2.7/logging/__init__.py",line 1278,in handle self.callHandlers(record) File "/usr/lib64/python2.7/logging/__init__.py",line 1318,in callHandlers hdlr.handle(record) File "/usr/lib64/python2.7/logging/__init__.py",in handle self.emit(record) File "/usr/lib64/python2.7/logging/__init__.py",line 879,in emit self.handleError(record) File "/usr/lib64/python2.7/logging/__init__.py",line 802,in handleError None,sys.stderr) File "/usr/lib64/python2.7/traceback.py",line 125,in print_exception print_tb(tb,limit,file) File "/usr/lib64/python2.7/traceback.py",line 69,in print_tb line = linecache.getline(filename,lineno,f.f_globals) File "/usr/lib64/python2.7/linecache.py",line 14,in getline lines = getlines(filename,module_globals) File "/usr/lib64/python2.7/linecache.py",line 40,in getlines return updatecache(filename,line 128,in updatecache lines = fp.readlines() RuntimeError: maximum recursion depth exceeded while calling a Python object chip_col替换为1red显示为2

假设我使用SAS-explorer打开了一个给定的表,现在我看到一个表,该表的列以数字而不是颜色作为文本。在这种情况下,我将右键单击列标题以打开列属性并浏览最合适的格式。

然后我的问题是双重的:首先,当调用带有所有可能格式的下拉菜单时,显示(自定义)格式的所有可用选择的SAS弹出窗口会花费很多时间。其次,我看不到实际的格式定义,只是看不到格式名称缩写,对我而言并不太有用。

我的问题:如何从SAS中以编程方式访问完整的格式信息?

解决方法

您可以使用proc sql显示的字典表来获取格式(以及数据集等其他内容)的完整列表。试试这个:

proc format library=work;
    value sex 0 = "F"
              1 = "M";
run;

proc sql;
    create table blah as
        select *
            from dictionary.formats
            where libname = "WORK"
        ;
quit;

如果从上面的SQL语句中删除where子句,它将列出所有格式的详细信息。

您可以使用proc format在这样的目录中显示格式:

* add your library where I have "WORK";
proc format library = WORK FMTLIB CNTLOUT = work.x;
run;

您可以使用CNTLOUT将信息保存到表中。

,

VIEWTABLE具有引发对话框的功能,该对话框为Column Attributes...窗口中显示的列定义VIEWTABLE。从列标题上下文菜单中,或者通过双击列标题,将弹出对话框。

如果您选择Format:字段省略号,则会弹出另一个对话框,用于从选择对话框中选择格式。作为填充选择对话框的一部分,VIEWTABLE的内部部件将生成SAS代码,并将其包含在选项/SOURCE2中。当有许多自定义格式时,这可能会导致大量LOG窗口输出,这可能会导致永久使用体验。 /SOURCE2由于是可视内部编码器的一部分而无法消除。

我假定的

Viewtable内部代码生成器用于填充格式选择器:

40218  proc delete data=work._qwffmt;
40219  run;
40220  proc sql;
40221  create table work._qwffmt as select fmtname,libname,memname from dictionary.formats where
40221! source='C' and fmttype='F' order by libname,memname;
40222  quit;
40223  filename _sascode temp;
40224  data _null_;
40225  file _sascode;
40226  put 'data work._fmtdesc;';
40227  put '     length fmtname $32 label $3 type $1 start $16 end $16 min max default 3;';
40228  put '     stop;';
40229  put '     fmtname=" "; label=" "; type=" "; min=0; max=0; start=" "; end=" "; default=0;';
40230  put '     run;';
40231  run;
40232  data _null_;
40233  set work._qwffmt;
40234  by libname memname;
40235  file _sascode mod;
40236  if first.memname then do;
40237  length libmem $41;
40238  libmem=cats(libname,'.',memname);
40239  put 'proc format lib=' libmem 'cntlout=_temp(keep=fmtname start end label min max default
40239! type) noprint;';
40240  put 'select';
40241  end;
40242  put fmtname;
40243  if last.memname then do;
40244  put '; run;';
40245  put 'proc append base=work._fmtdesc data=_temp force; run;';
40246  put 'proc delete data=_temp; run;';
40247  end;
40248  run;
40249  %include _sascode/source2;
40250 +data work._fmtdesc;
40251 +     length fmtname $32 label $3 type $1 start $16 end $16 min max default 3;
40252 +     stop;
40253 +     fmtname=" "; label=" "; type=" "; min=0; max=0; start=" "; end=" "; default=0;
40254 +     run;
40255 +proc format lib=WORK.FORMATS cntlout=_temp(keep=fmtname start end label min max default
40255!+type) noprint;
40256 +select
40257 +_BABB                     /* if many thousands,log window can slow things a lot */
40258 +_BAAB
40259 +_ABAB
40260 +_BBAB
40261 +_BAAA
40262 +_ABAA
40263 +_BABA
40264 +_AABA
40265 +_BBAA
40266 +_ABBA
40267 +_BBBA
40268 +_AAAA
40269 +_AAAB
40270 +_AABB
40271 +_ABBB
40272 +_BBBB
40273 +;
40273!+  run;
40274 +proc append base=work._fmtdesc data=_temp force; run;
40275 +proc delete data=_temp; run;
40276  run;
40277  filename _sascode clear;

避免此会话破坏日志输出的唯一方法是在打开VIEWTABLE之前将日志输出发送到临时文件,这通常是一个不合理的命题。

这是创建10,000种自定义格式的示例代码,在我的系统上,填充列表并在通过Format对话框窗口省略号引起的Column Attributes对话框中显示列表大约需要4秒钟。随着自定义格式数量的增加,时间延迟会线性地恶化。

proc printto log=log;
run;

proc datasets noprint lib=work;
  delete formats / mt=catalog;
run;

%let N_FORMATS = 10000;
%let ROOT4 = %sysevalf((&N_FORMATS-1) ** 0.25,FLOOR);

%put &=ROOT4;

data cntlin;
  do l1 = 65 to 65+&ROOT4;
    c1 = byte(l1);
    do l2 = 65 to 65+&ROOT4;
      c2 = byte(l2);
      do l3 = 65 to 65+&ROOT4;
        c3 = byte(l3);
        do l4 = 65 to 65+&ROOT4;
          c4 = byte(l4);
          fmtname = '_' || cats(of c:);
          start = 0; label = 'No '; output;
          start = 1; label = 'Yes'; output;
        end;
      end;
    end;
  end;
  keep fmtname start label;
run;

proc sql noprint;
  select count(DISTINCT fmtname) into :count trimmed from cntlin;

%put &=count different custom formats;

options nonotes;

proc format cntlin = cntlin;
run;

options notes;

data have;
  call streaminit(123);
  array v v1-v200;
  do row = 1 to 150;
    do over v; v = rand('integer',1); end;
    output;
  end;
run;

options nonotes nosource2;

filename dump temp;
proc printto log=dump;
run;

dm 'vt have' viewtable;
,

听起来像您用来查看数据的任何GUI工具(也许是VIEWTABLE?)都没有提供格式列表的好方法。在那种情况下,我会尽量避免这样做。因此,通常在创建数据集时应附加格式。因此,如果您以这种方式定义数据集:

doks.digitalocean.com/node-pool-id

然后在查看器中打开它时,您将看到:

ViewTable

如果您想让一个方法同时看到代码和解码,请检查此宏以创建新的格式定义,其中将代码包含在解码中。

https://github.com/sasutils/macros/blob/master/cfmtgen.sas

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


依赖报错 idea导入项目后依赖报错,解决方案:https://blog.csdn.net/weixin_42420249/article/details/81191861 依赖版本报错:更换其他版本 无法下载依赖可参考:https://blog.csdn.net/weixin_42628809/a
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下 2021-12-03 13:33:33.927 ERROR 7228 [ main] o.s.b.d.LoggingFailureAnalysisReporter : *************************** APPL
错误1:gradle项目控制台输出为乱码 # 解决方案:https://blog.csdn.net/weixin_43501566/article/details/112482302 # 在gradle-wrapper.properties 添加以下内容 org.gradle.jvmargs=-Df
错误还原:在查询的过程中,传入的workType为0时,该条件不起作用 &lt;select id=&quot;xxx&quot;&gt; SELECT di.id, di.name, di.work_type, di.updated... &lt;where&gt; &lt;if test=&qu
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct redisServer’没有名为‘server_cpulist’的成员 redisSetCpuAffinity(server.server_cpulist); ^ server.c: 在函数‘hasActiveC
解决方案1 1、改项目中.idea/workspace.xml配置文件,增加dynamic.classpath参数 2、搜索PropertiesComponent,添加如下 &lt;property name=&quot;dynamic.classpath&quot; value=&quot;tru
删除根组件app.vue中的默认代码后报错:Module Error (from ./node_modules/eslint-loader/index.js): 解决方案:关闭ESlint代码检测,在项目根目录创建vue.config.js,在文件中添加 module.exports = { lin
查看spark默认的python版本 [root@master day27]# pyspark /home/software/spark-2.3.4-bin-hadoop2.7/conf/spark-env.sh: line 2: /usr/local/hadoop/bin/hadoop: No s
使用本地python环境可以成功执行 import pandas as pd import matplotlib.pyplot as plt # 设置字体 plt.rcParams[&#39;font.sans-serif&#39;] = [&#39;SimHei&#39;] # 能正确显示负号 p
错误1:Request method ‘DELETE‘ not supported 错误还原:controller层有一个接口,访问该接口时报错:Request method ‘DELETE‘ not supported 错误原因:没有接收到前端传入的参数,修改为如下 参考 错误2:cannot r
错误1:启动docker镜像时报错:Error response from daemon: driver failed programming external connectivity on endpoint quirky_allen 解决方法:重启docker -&gt; systemctl r
错误1:private field ‘xxx‘ is never assigned 按Altʾnter快捷键,选择第2项 参考:https://blog.csdn.net/shi_hong_fei_hei/article/details/88814070 错误2:启动时报错,不能找到主启动类 #
报错如下,通过源不能下载,最后警告pip需升级版本 Requirement already satisfied: pip in c:\users\ychen\appdata\local\programs\python\python310\lib\site-packages (22.0.4) Coll
错误1:maven打包报错 错误还原:使用maven打包项目时报错如下 [ERROR] Failed to execute goal org.apache.maven.plugins:maven-resources-plugin:3.2.0:resources (default-resources)
错误1:服务调用时报错 服务消费者模块assess通过openFeign调用服务提供者模块hires 如下为服务提供者模块hires的控制层接口 @RestController @RequestMapping(&quot;/hires&quot;) public class FeignControl
错误1:运行项目后报如下错误 解决方案 报错2:Failed to execute goal org.apache.maven.plugins:maven-compiler-plugin:3.8.1:compile (default-compile) on project sb 解决方案:在pom.
参考 错误原因 过滤器或拦截器在生效时,redisTemplate还没有注入 解决方案:在注入容器时就生效 @Component //项目运行时就注入Spring容器 public class RedisBean { @Resource private RedisTemplate&lt;String
使用vite构建项目报错 C:\Users\ychen\work&gt;npm init @vitejs/app @vitejs/create-app is deprecated, use npm init vite instead C:\Users\ychen\AppData\Local\npm-