长时间用户,第一次张贴海报。我对IML非常陌生,并曾在R之前玩过。我目前正在尝试创建一个邻接表,以便于SAS/IML中的网络计算。我正在处理的文件非常庞大。我正在做一个涉及使用SAS文件的实现,并且在内存中没有邻接列表。创建一个空文件并从特定行(对应于特定代理)读取一切都很顺利,直到“最终”步骤:更新整个观察。如何通过IML替换在SAS文件上工作的整个观察结果
下面是工作的IML代码,直到最后一个阶段。
proc iml;
/* initialize vars*/
checkObs = 2;
numCol = 5;
db = "myTestDataBase";
nObs = 5;
temp = {};
myList = J(1, numCol, 0);
nVarToUpdate = 2;
/* create empty database */
create (db) from myList;
append from myList;
close (db);
do i = 1 to (nObs-1);
edit (db);
append from myList;
close (db);
end;
/* read index checkObs and write to temp*/
edit (db);
read point (checkObs) into temp; /* Read an entire row*/
temp[nVarToUpdate] = 1; /* I would like to update some values*/
/* I want to replace point chekObs with the whole of vector temp*/
replace point checkObs var _all_;
close (db);
print temp;
我的目的是取代/更新整个观察(行),同时保持行的顺序不变。有任何想法吗?
在我的iphone上:我看到的解决方案是将col1作为索引,删除我正在更新的行,并在文件末尾附加新的观察值。为了保持磁盘的快乐,我可以将它们分块。 –
我不知道太多的IML,但唯一能让它工作的方法是分配变量COL2 = 1;我正在研究如何知道变量的名称。当然你有默认名称(COL1 = COLn),但我认为你会需要更通用的解决方案。 –
是的,它的列名 - 对于这个具有预定目标结构的特定数据集 - 是有问题的。我需要计算每个添加数据的下一条信息的位置。我已经厌倦了宏变量来为列创建动态的“名称”,但我无法“动态地”更新它。因为它似乎编译在运行代码之前。 –