Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >SAS-这几个小语法真的很鸡肋吗?

SAS-这几个小语法真的很鸡肋吗?

作者头像
Setup
发布于 2019-10-21 09:37:03
发布于 2019-10-21 09:37:03
1.7K00
代码可运行
举报
运行总次数:0
代码可运行

今天给大家分享一个看似鸡肋然则不鸡肋的语法...

真的鸡肋吗?

我们在写程序对大量数据集批量操作的时候,如果有的数据集有某变量,有的数据集没有某变量,而这个变量也作为程序处理的关键变量...这个时候我们就需要来判断某数据集中此变量是否存在,如果不存在生成该变量....那么有什么办法来判断数据集中某变量是否存在呢?当然办法也是很多的,不过下面的办法我想算是一个比较快捷的方式...下面来看一段小编写的转置小代码~

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
%macro  comp_sum(indsn=);

%let dsid=%sysfunc(open(&indsn.));
%let varhave=%sysfunc(varnum(&dsid,SEQID));
%let rc= %sysfunc(close(&dsid));
%put ***********************************************************;
 Skip 1;
%put DOMAIN:&indsn.中变量SEQID序号为:&varhave;
 Skip 1;
%put ***********************************************************;

data comp_temp;
  set &indsn.;
  %if  &varhave.=0 %then %do;
  SEQID=.;
  %end;
run;
proc sort data=comp_temp  out=comp_temp  sortseq=linguistic(numeric_collation=on);by VISIT SEQID ;quit;
proc transpose data=comp_temp(where=(^missing(SUBJID))) out=%scan(&indsn.,2,'.') prefix=C;
by VISIT SEQID;
var _all_;
id SUBJID ;
run;
%mend;

还是回到如何判断数据集中是否存在某变量这个话题上来,上面代码关于这个话题的核心在于获取数据集变量序号,如果数据集中没有此变量,则返回0,如果有此变量则返回变量的序号~看一下执行的宏以及日志!

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
%comp_sum(indsn=temp.AE)

%comp_sum(indsn=temp.DM)

嗯,数据集内容,小编就不拿出来了,这里面肯定是可以实现判断数据集里面是否存在某个变量。。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
*Check数据集中某变量是否存在;

%let dsid=%sysfunc(open(SASHELP.CLASS));
%let varhave=%sysfunc(varnum(&dsid,sex));
%let rc= %sysfunc(close(&dsid));
%put **************************&varhave**************************;

*通过变量序号获取变量label;
%let dsid=%sysfunc(open(SASHELP.CLASS));
%let sss=%sysfunc(varlabel(&dsid,%sysfunc(varnum(&dsid,sex))));
%let rc= %sysfunc(close(&dsid));
%put **************************&sss**************************;

这样的函数~SAS还有很多,如何查呢?在SAShelp中搜索肯定是能找到....

纠一个错

前几天和同事讨论问题的时候,突然发现了自己对CMISS的理解有错误!!以前小编写的推送,CMISS是用来计算字符型的变量缺失个数,NMISS是计算数值型变量的缺失格式!实则不然,CMISS是一个很奇特的函数,数值型和字符型变量缺失个数都可以计算的!!!所以在这里纠正一下!

又发现了交流的重要性,交流才能进步!!

数据集属性的修改

前几天有人问我如何删除数据集里面的label,好吧,我以前很low,都是直接将label 赋值为空,虽然知道有快捷方式,也见过,但是也是一带而过...

复制一段SASHELP里面的程序例子,给大家分享一下如快速去掉数据集的label与删除数据集的format...

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
options ls=79 nodate nocenter;
title;
proc format;
   value clsfmt 1='Freshman' 2='Sophmore' 3='Junior' 4='Senior';
run;
data class;
   format z clsfmt.;
   label x='ID NUMBER'
      y='AGE'
      z='CLASS STATUS';
   input x y z  ;
datalines;
1 20 4
2 18 1
;
run;

proc contents data=class;
run;
proc datasets lib=work memtype=data;
   modify class;
     attrib _all_ label=' ';
     attrib _all_ format=;
run;
contents data=class;
run;
quit;
本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2018-05-18,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 SAS程序分享号号号 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
SAS-函数(三),这几个函数你都知道吗~
昨天最后的一个函数是Lag,那么今天的第一个函数是和昨天的lag很类似,Lag可以将前一条观测下移,然后求差值,那么今天这个函数是可以直接求上下观测的差值...下来看看这段代码...
Setup
2019/10/20
4.7K0
SAS-编程中的小技巧(三)
这又是一篇SAS编程中的小技巧,这次要说的是SAS中数据字典与Macro结合起来的使用技巧,以及数据集删除、保存等技巧....
Setup
2019/10/20
2.5K0
SAS-如何找出数据集超长变量及观测,并自动进行变量的拆分...
前段时间有人给小编提了一个需求,找出数据集中长度超过200字节的变量,并对变量进行拆分...这个需求当然不难,但是还是分享给大家~主要最近没写啥程序,也就没学到啥新的技能...关于变量长度的拆分,我想也是一个常见的问题。
Setup
2019/10/20
3.9K0
SAS-一个小程序实现变量类型的自动转化~
做为标题党的小编,一贯喜欢将标题写很大...嗯,最近写了一个小程序,虽然是一个没有任何技术含量的程序,不过还是想分享给大家。这个程序实现的功能是将SAS数据集中数值型变量转换成字符型变量,如果变量含有format,这时会将显示的format的值直接赋值给新的变量。
Setup
2019/10/21
1.2K0
SAS-走近Log,实现程序的“风险控制”
从第一天学习SAS开始,就摆脱不了看SAS日志,每次运行完程序的第一件事,不是看程序运行的结果,而是点击一下Log页面,第二件事也不是去看结果,而是仔细的浏览Log里面,有没有红色的字体出现(ERROR),有没有绿色的字体出现(WARNING),接着在看有没有黑色的_ERROR_=1出现(出现这种情况,一般是你的数据不满足条件或者语法有问题,下面会有例子),接着还得再看看有没有蓝色的字体(XXX未初始化)出现。就目前小编主要看的也就这四种常见的问题。肯定是不全的,各位大神如有兴趣可以留言补充~
Setup
2019/10/21
3.5K0
当+(加号)碰上input&Excel测量文本长度
2.SDTM.LB.LBSTREFC这个变量在IG3.2里是Perm,IG3.3里是Exp,IG3.4里是先改成Perm,然后把这个变量删掉了 https://www.cdisc.org/kb/known-issues/lbstrefc-core-attribute-should-not-have-been-expected-sdtmig-v3-3
归海刀刀
2024/02/05
1580
当+(加号)碰上input&Excel测量文本长度
SAS︱数据索引、数据集常用操作(set、where、merge、append)
数据索引的创建有三种方式:data步骤、sql步骤、datasets步骤。 其中还是有点困惑在data与datasets的区别之上,datasets是对逻辑库中数据集进行操作的方式,而data之后是代表程序的开始。
悟乙己
2019/05/27
7.1K0
SAS-时药曲线的绘制(完)
本文是上一篇的推文的续篇,本篇推文将主要介绍GTL绘制受试者维度的时药曲线(画拼图),并分享小编刚出炉的,还热腾腾的自动画图的宏程序。点击
Setup
2019/10/20
3.4K0
SAS进阶《深入解析SAS》之开发多语言支持的SAS程序
本文介绍了如何在SAS中使用逻辑库和格式来处理多语言文本,并通过实例演示了如何在SAS中读取和写入文本文件。同时,还介绍了如何使用SAS的字符串函数和CALL例程来处理字符数据。
王小雷
2018/01/02
2.1K0
SAS-编程中的小技巧(六)
前段时间有人问小编,批量执行ods输出文件时,总是弹出并打开输出的文件,有没有办法关闭呢?你是否也遇到这样的问题,而找遍ods相关的Option仍无法解决呢?解决办法其实还是很简单的。下面来看看怎么解决。
Setup
2019/10/20
1.8K0
SAS-令人耳目一新的几个any函数...
今天在想我要写啥呢,写啥呢....然后有朋友给我推荐了一个很有意思函数...为啥说这几个函数很有意思呢,因为是一个系列的,可以实现一个类似的特定功能...小编以前也没有留意过,看到了这几个函数,也是眼前一亮,感觉也挺好玩的。
Setup
2019/10/20
3K0
SAS-Macro 中的那些语句(四)
大家都知道SAS数据集中的变量是分数值型、字符型的。那么SAS的宏变量是否分数值型变量和字符型变量呢?是不分的,那么宏变量的计算是直接算么?当然是不是的,宏变量的计算是有俩个关键词%eval(只能进行整数的运算),%sysevalf(可进行整数运算与小数运算)....
Setup
2019/10/20
4.2K0
SAS-新规试行下诞生的程序
昨日,《药物临床试验数据递交指导原则》(试行)版正式公布了,在小编阅读后,于是本文因时而生了。
Setup
2020/07/24
2.2K0
SAS-新规试行下诞生的程序
SAS-Macro 中的那些语句(一)
说到Macro,那么就不得不说宏变量,宏变量的是啥呢?可以理解成和其它编程语言中的变量一样,在内存中创建了一个空间(给这个空间一个标记,宏变量的名称),然后将一些值放到这个内存空间中(这就是定义宏变量的过程),好吧,我是一个不善解释的人,没理解的还是自行百度领悟。那么就来看看如何来定义Macro变量。
Setup
2019/10/21
2.5K0
SAS-Macro 中的那些语句(一)
SAS- 100种数据compare的方式,你在用哪种?
小编是医药行业的,所以小编的推送涉及的知识也多为SAS在临床研究中的运行及SAS数据清洗等相关的程序,在临床试验中,很多SOP相对完善的公司,出于对数据质量的把控,一般项目都会采用double programming,一个项目会有多个人参与,写俩份独立的程序,最终会对结果进行compare,今天的主题就是数据的compare.
Setup
2019/10/21
2.2K0
Macro-SAS2XPT/XPT2SAS
1.proc cport 过程步,与之对应的是XPT生产SAS数据的方式proc cimport 。
Setup
2019/10/21
3.3K0
Macro-SAS2XPT/XPT2SAS
SAS-一个小程序获取某网ATC编码库~
关于获取网页信息,小编其实在很早就有写到SAS-爬取帖子下的邮箱,给他们发一封邮件...嗯,其实也就是通过获取网页代码,从网页代码中提取出需要信息~还是看一张截图(谷歌浏览器按F12即可查看也面代码)
Setup
2019/10/21
1.5K0
SAS-一个小程序获取某网ATC编码库~
SAS-那些统计过程步的统计量的输出...
在SAS使用统计相关的过程步输出结果的时候,结果经常会呈现在result中(以网页或者Lst的形式展现),那么你曾经是否纠结过如何将这些统计量的值自动提取出来,或直接输出到数据集中呢...那么今天小编将盘点一下SAS中Ods Output 将统计量输出到数据集中的方式与技巧,如果有不当或错误之处,同时也邀各位前辈纠错...
Setup
2019/10/21
4.9K0
SAS-100种输出Excel的方法,你在用哪种?
你是被标题吸引来的么?那么小编就要向你道歉了,100种?当然是没有的,但还是有很多中,小编今天的要盘点的一下SAS输出Excel的方法,各种方式之间的优劣。其实好几天前就打算写的,也是在好几天前开始酝酿,一直没有空下来的时间,年底了,各种忙,小编的时间就像是被挤干了的海绵一样,这几天怎么挤都挤不出。废话好像有点多,还是回到今天的主题上~
Setup
2019/10/21
6K0
SAS-临床试验中编码频数表的自动输出
今天要写的是关于SAS在临床试验中自动输出频数表的程序。在临床试验中,我们会对不良事件与合并用药进行医学编码,编码后,我们会对编码进行分级频数汇总。汇总表长的什么样子呢,来见下图!
Setup
2019/10/21
2.2K0
相关推荐
SAS-函数(三),这几个函数你都知道吗~
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档