如何批量删除SAS数据集中的特定变量--Call Execute

假设WORK逻辑库中有10个数据集,其中8个数据集存在的变量var1、var2,但不知晓具体是哪8个数据集。现在要将这两个变量从这8个数据集中删除,如何实现这个效果呢?

首先,从变量中删除变量常用的就是data步中的drop语句,我们可以针对每一个数据集写一个data步删掉这两个变量,简单粗暴。只要对这8个数据集重复下面的代码就好。但是,这里有两个问题。第一,我不知道具体是哪8个数据集含有这两个变量;第二,数据集可能含有其中一个变量,drop语句删除两个变量会报error,这个如何处理。严格意义上,我们得对这10个数据集都进行这样的操作,才能确保万无一失。在这样的情况下,对没有这两个数据集进行这样的操作,程序运行也会出现error,出现这样的error后,再修改代码,可以实现这个功能。这显得一点也不智能,而且,这样的代码也不够稳定,如果下次数据中var1、var2变动,也要重新修改代码。
删除var1和var2

那有没有稍微“智能”的操作,可以自动找出这8个数据集并且删掉这两个变量的方法呢?答案是有的。因为对每一个数据集的操作都是相同的,每次代码变动的部分就是数据集的名称,那我们将这个操作重复8次,每次只改变数据集名称以及要删除变量的名称不就好了?

这里一个关键点,我得先找出含有var1、var2变量的数据集。这里,我们通过SAS字典来实现,SAS字典中包含的描述各个逻辑库下数据集的元数据信息,我们用SQL来访问SAS字典。例如,我想找出WORK逻辑库下含有变量var1或var2的数据集名称,我使用以下代码进行演示,先看下代码和运行结果。

输出WORK逻辑库中包含变量var1和var2的数据集名称
输出结果

可以看到WORK逻辑库中包含var1和var2变量的数据集名称都保存在输出数据集中。接下来就是针对每一个数据集进行删除对应的变量。具体到删除变量,最基础的操作一定是第一张图片的代码的样式,现在要想办法将数据集名称和要删除的代码名称“填”到示例代码中。如何操作呢?第一个想法,直接把数据集名称和变量名读进宏变量直接引用;这里我们介绍另一个方法,使用call execute语句。

Call execute语句

EXECUTE,照着字面意思理解,就是执行语句。上面的代码就是执行引号内的文字内容,不过,由于数据集有4行数据,所以这样的语句会执行4次,日志结果如下:

Call execute日志结果1

这里的代码还可以进一步改进,上面的每一次代码执行只删除一个变量,如果要删除两个变量,要执行两次,那可不可以缩减成一次完成呢?这里将每个数据集中要删除的变量名整合到一个变量中,并且以空格间隔。我们可以使用Transpose过程步,先把竖向数据转化成横向,然后再进行拼接。

竖向转横向代码--Transpose
转换结果1

除了Transpose过程步,还可以在Data步中用Retain语句实现这样的拼接效果。

竖向转横向代码--Retain
转换结果2

这样处理之后,时候Call execute语句时,针对每一个数据集只需一次运行代码,实现批量删除特定变量。


Call execute日志结果2

对SAS字典不熟悉的人可能对前面的操作有一些疑惑,我们可以输出SAS字典的内容,进行观察理解。我在写上面代码的时候,遗忘了数据集中变量的名称,也是先输出完整的SAS字典内容,查看具体变量名称后再进行后续编程。


查看字典Columns的内容
内容展示

由于输出窗口大小的原因,我只截取前面几个变量。Columns字典中包含libname(逻辑库名)、memname(数据集名)、matatype(变量类型)、name(变量名称)等描述变量属性的数据。通过这张表就很容易理解前面代码的筛选步骤了。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 215,723评论 6 498
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,003评论 3 391
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 161,512评论 0 351
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,825评论 1 290
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,874评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,841评论 1 295
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,812评论 3 416
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,582评论 0 271
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,033评论 1 308
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,309评论 2 331
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,450评论 1 345
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,158评论 5 341
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,789评论 3 325
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,409评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,609评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,440评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,357评论 2 352

推荐阅读更多精彩内容

  • 一.建立数据集的基础和高级议题从最简单的建立SAS数据集开始,逐步深入,介绍如何产生新变量、如何对数据集中的变量进...
    apricoter阅读 3,867评论 1 8
  • 2.12 一行有多个观测值的原始文件读取 当一行出现多个观测值时,可以在input语句结尾加一个停止符号@@ 例子...
    胡阿白阅读 563评论 0 1
  • 1.基本使用 1.1 数据类型 常用数据类型 Common Data Types 其他类型 Others 1.2 ...
    suwi阅读 1,342评论 0 3
  • 我想一次性付费,阅读所有 Tasker 中文用户指南哦?OK,请访问此链接 原创内容,未经本人授权不得转载
    blackspot阅读 1,469评论 0 1
  • 家庭是最小的社会单位,门吱呀一声关上后,在这里人们如何相待,多少决定了一个社会的基本面目。 是啊,『欲治其国者,先...
    沉默王二阅读 1,276评论 0 0