这是我的代码:
local dateList "01" "02" "03" "04" "05" "06" "07"
foreach date of local dateList {
use `"`date'"'
clear
import excel "V:\Report07" + `"`date'"' + "13.xls", sheet("MySheet") firstrow
sort PersonID Place
bysort PersonID (Place): gen mix = Place[1] != Place[_n]
sort PersonID
by PersonID: egen anymix=max(mix)
count if anymix==1
drop mix
drop anymix
}
我正在尝试遍历因日期不同的多个Excel文件,您可以在我放置变量date
的代码中看到。例如,此电子表格的名称为Report070113
,表示日期为2013年7月1日。下一次循环应导入标题为Report070213
的报告。我认为最好的方法是创建一个字符串数组,这些字符串是月份的不同日期,因此我可以逐月运行代码并获取访问过不同位置的每个人的计数。我知道循环内部的工作正常,但我遇到了for循环本身的问题。当我有:
use `"`date'"'
在代码(第3行)中,它给出了以下错误:
file 01".dta not found
但是当我不包含该行时,它会给我此错误:
using required
任何帮助将不胜感激;如果我的问题不清楚,请告诉我。
答案 0 :(得分:1)
查看使用单引号和双引号之间的区别:
clear all
set more off
local dateList "01" "02" "03" "04" "05" "06" "07"
foreach date of local dateList {
disp `"`date'"'
disp "`date'"
}
问题是宏列表的第一个元素是01"
而不是01
。所以Stata找不到该文件。这是由于您声明宏列表然后使用双引号调用的方式。 help quotes
是一个相关的读物。
对我而言,这样做会更清楚:
clear all
set more off
local dateList 01 02 03 04 05 06 07
foreach date of local dateList {
disp `"`date'"'
disp "`date'"
display "V:/Report07`date'13.xls"
* This should work for you (uncomment)
*import excel "V:/Report07`date'13.xls", sheet("MySheet") firstrow
}
注意宏的声明不包含引号。现在,使用双引号或单引号的调用会产生相同的结果。为源文件创建字符串非常简单。此外,建议使用/
而不是\
。这使代码与其他操作系统兼容。 Stata将使其适用于MS Windows,包括在内。参考是
Stata tip 65: Beware the backstabbing backslash作者:Nicholas J. Cox。
至于using required
错误,我的猜测是这与import excel
期待字符串而不是代数表达式有关。在命令中添加简单的+
将重现您的错误。例如:
. import excel "V:/Report07" +
using required
r(100);
Stata不理解这个符号,所以它抱怨;它想要一些表示文件路径的字符串。 (如果您运行import excel "V:/Report07 +"
,则会出现不同的情况。
答案 1 :(得分:0)
尝试修改您的"导入Excel"文件路径:
local dateList "01" "02" "03" "04" "05" "06" "07"
foreach date of local dateList {
clear
import excel "V:\Report07\`date'13.xls", sheet("MySheet") firstrow
sort PersonID Place
bysort PersonID (Place): gen mix = Place[1] != Place[_n]
sort PersonID
by PersonID: egen anymix=max(mix)
count if anymix==1
drop mix
drop anymix
}
如果仍然要求"使用必需",请尝试"使用..."导入excel。
答案 2 :(得分:0)
我知道这已经有3年了,但我遇到了同样的问题(获得“使用必需”错误),因为我试图循环打开并修改多个Excel文件。更改目录名称中斜杠的方向修复了该问题。
class UserProfile(models.Model):
user = models.OneToOneField(User, on_delete=models.CASCADE)
bio = models.TextField(max_length=170, blank=True)
avatar_url = models.CharField(max_length=256, blank=True)
facebook_url = models.CharField(max_length=40, blank=True)
twitter_url = models.CharField(max_length=40, blank=True)
instagram_url = models.CharField(max_length=40, blank=True)
web_url = models.CharField(max_length=40, blank=True)
class Meta():
db_table = 'auth_profile'
def __str__(self):
return self.user.username
@receiver(user_signed_up)
def set_initial_user_names(request, user, sociallogin=None, **kwargs):
preferred_avatar_size_pixels = 256
picture_url = "http://www.gravatar.com/avatar/{0}?s={1}".format(
hashlib.md5(user.email.encode('UTF-8')).hexdigest(),
preferred_avatar_size_pixels
)
if sociallogin:
if sociallogin.account.provider == 'twitter':
name = sociallogin.account.extra_data['name']
user.first_name = name.split()[0]
user.last_name = name.split()[1]
if sociallogin.account.provider == 'facebook':
user.first_name = sociallogin.account.extra_data['first_name']
user.last_name = sociallogin.account.extra_data['last_name']
picture_url = "http://graph.facebook.com/{0}/picture?width={1}&height={1}".format(
sociallogin.account.uid, preferred_avatar_size_pixels)
if sociallogin.account.provider == 'google':
user.first_name = sociallogin.account.extra_data['given_name']
user.last_name = sociallogin.account.extra_data['family_name']
picture_url = sociallogin.account.extra_data['picture']
profile = UserProfile(user=user, avatar_url=picture_url)
profile.save()
@receiver(post_save, sender=User)
def create_or_update_user_profile(sender, instance, created, **kwargs):
if created:
UserProfile.objects.create(user=instance)
instance.userprofile.save()
原始(失败)导入命令:
local yearlist 2014 2015
foreach year of local yearlist {
import....
[do data cleaning]
save update file
}
新(工作)导入命令:
import excel "Z:\Data\`year'\GIS Class Data Report1_`year'.xlsx", sheet("Sheet1") firstrow clear
我没有意识到反斜杠问题。