有没有办法替换ViewTable窗口中当前打开的数据集?
例如,假设我创建了以下数据集:
data the_meaning_of_life;
is = 2;
run;
我打开它注意,哦,drat!,我做了一个错字!我更正了代码并重新运行。
data the_meaning_of_life;
is = 42;
run;
然后我遇到了以下消息,
ERROR: You cannot open WORK.THE_MEANING_OF_LIFE.DATA for output access with member-level
control because WORK.THE_MEANING_OF_LIFE.DATA is in use by you in resource environment
ViewTable Window.
当然有一些解决方法。在keys
菜单中,我可以绑定
next viewtable:libref.dataset;end;
到F
键或前缀提交按钮,以便在提交代码之前关闭所有VT。
我认识到我做了一个假设。我假设是因为ViewTable窗口被称为" ViewTable"这确实是一种观点。
根据SAS,视图是
为以后命名和存储的虚拟数据集的定义 使用。视图不包含任何数据;它只是描述或定义数据 存储在别处。
视图应独立于数据集。在SAS资源管理器中双击数据集时,似乎打开了ViewTable并不是真正的'视图。所以也许我的问题应该修改为,
如何将数据集视为视图?
答案 0 :(得分:1)
您可以通过创建视图然后打开它来将数据集视为视图。但你误解了观点是什么;具体而言,视图可以锁定数据集,如果它设置为(在某些DBMS中),则它在运行时。 (稍后会详细介绍。)
SAS锁定数据集,不是因为它有,而是因为它是正确的,因为它是如何工作的。当处理"在修改基础数据集时如何处理可查看窗口"时,您有三个选择,正确(可能是四个)?
ViewTable是一个相当古老的概念 - 并且使用了相当古老的方法。因此,第二种选择是不可能的 - 它不是以可以实时更新的方式运行的东西。第三种情况并非如此:它再次要求SAS知道发生了变化并且能够更新ViewTable窗口,而目前它并没有这样做。现在,ViewTable只是抓取数据并显示给您,然后再也不会检查。选项4很糟糕,因为你现在让用户对什么" true"是的,特别是因为ViewTable实际上允许直接编辑数据(这绝不是我会做的事情,但它是可能的!)。
因此SAS使用选项1:锁定表中的任何更改,因此您知道您拥有当前信息。
另外,旁注; ViewTable是一个AF应用程序,它实际上不是一个View。 ViewTable意味着"查看表格#34;而不是"从表格中查看"。
至于你如何处理这个问题:不幸的是,写一个视图不会有帮助。请注意:
data class;
set sashelp.class;
run;
data class_view/view=class_view;
set class;
run;
运行它,打开视图,然后重新运行第一个数据步骤。是的,你仍然锁定它!这是因为打开视图实际上会告诉SAS锁定视图使用的数据集,原因与上述相同。
你可以做些什么:
data class;
set sashelp.class;
run;
proc print data=class;
run;
你可以整天运行它并且它不会有任何问题,因为proc print
只是一个静态的"视图"没有锁定任何东西。
你也可以使用ODS TAGSETS.TABLEEDITOR
,这可能会给你一些更有用的东西。
您绝对可以使用keys
选项关闭表格。更好的方法是使用Enterprise Guide,它有一个很好的选项,告诉EG在运行任何东西之前关闭所有打开的数据集。