Locating people by roleId
You can introduce range variables to hold data which you need several times in your query:

var analystRoleId = 3;
var testAnalystIds = new[] { 130, 252, 264, 302 };

var activeAnalysts = 
    from p in xdoc.Descendants("People")
    let id = (int)p.Element("id")
    let isActive = (int)p.Element("active") == 1                        
    let isAnalyst = p.Descendants("roleIds").Elements().Any(e =&gt; (int)e == analystRoleId)
    let firstName = (string)p.Element("firstName")
    let lastName = (string)p.Element("lastName")
    where isActive &amp;&amp; isAnalyst &amp;&amp; !testAnalystIds.Contains(id)
    select new PeopleClass {
        ResAnId = id,
        DpInit = (string)p.Element("clientCode"),
        ResAnFName = firstName,
        ResAnLName = lastName,
        ResAnName = $"{firstName} {lastName}",
        RoleId = analystRoleId,
        DivisionId = (int?)p.Element("divisionId")
    };


Also 


You can use interpolated strings instead of String.Format
I believe id always should present in your file and it will not be null. There is no need to cast this value to nullable
I believe you should check all role ids for verifying whether person is analyst. But you can use FirstOrDeafult as well
You don't need to query for roleId second time - if person matched where clause then it's analyst and you know his role id
You don't need to access Value property of XElement. It's better to use explicit cast operator. Otherwise you can get NullReferenceExceptions
If you can change implementation of PeopleClass then start with renaming it to Person and give more descriptive names to its fields. You can also remove backing storage from ResAndName filed and make it calculated on the fly.